{"_id":"56d6bc9947f18a2d0088d612","user":"56cf3e935267d70b00494c47","parentDoc":null,"githubsync":"","__v":98,"category":{"_id":"56d6bbf046d19315000f8ea2","version":"56d54a77075dfa0b00be98d8","project":"56d54a77075dfa0b00be98d5","__v":4,"pages":["56d6bc9947f18a2d0088d612","56d6cb47c6473c0b00ba8881","56d6cbeb47f18a2d0088d63d","56d6e080a9e4480b00efb80f"],"sync":{"url":"","isSync":false},"reference":false,"createdAt":"2016-03-02T10:09:52.766Z","from_sync":false,"order":0,"slug":"introduction","title":"Main APIs"},"project":"56d54a77075dfa0b00be98d5","version":{"_id":"56d54a77075dfa0b00be98d8","__v":13,"project":"56d54a77075dfa0b00be98d5","createdAt":"2016-03-01T07:53:27.479Z","releaseDate":"2016-03-01T07:53:27.479Z","categories":["56d54a78075dfa0b00be98d9","56d6bbf046d19315000f8ea2","56d6bbfc46d19315000f8ea3","570cefd98da5b62b00d57e3c","571491a74007610e00c803ae","5714dcd837b7e00e00de5684","5715ea6ac016190e00f04272","5715f27fc016190e00f0429f","5715f7b9893cbe0e002d74da","5715f8c2c016190e00f042b8","5715fd49a9055c0e0015fbe7","57160c7e893cbe0e002d753a","5716136a893cbe0e002d7552"],"is_deprecated":false,"is_hidden":false,"is_beta":false,"is_stable":true,"codename":"","version_clean":"1.0.0","version":"1.0"},"updates":["570c95981e76a70e00678ef6","570c964739ef110e0014f5ee","570c96ba25b79f0e00b0dcdc","570c98ce1e76a70e00678f03","57eba70d0db1190e0094a36b"],"next":{"pages":[],"description":""},"createdAt":"2016-03-02T10:12:41.932Z","link_external":false,"link_url":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[]},"settings":"","auth":"required","params":[],"url":""},"isReference":false,"order":0,"body":"[block:html]\n{\n  \"html\": \"<h3>General</h3>\"\n}\n[/block]\nThe API supports different means to call: \n\n  * [REST](http://en.wikipedia.org/wiki/Representational_state_transfer)\n  * [SOAP](https://en.wikipedia.org/wiki/SOAP)\n  * Plain HTTP with browser\n[block:html]\n{\n  \"html\": \"&nbsp;\"\n}\n[/block]\n\n[block:html]\n{\n  \"html\": \"<h3>Authentication</h3>\"\n}\n[/block]\nPermission to the API service is granted by use of an authentication token.\n\nTo obtain your token you need to send a formal request to your Trackunit account contact. \n[block:callout]\n{\n  \"type\": \"info\",\n  \"title\": \"Important\",\n  \"body\": \"The API token must remain secret. You shouldn’t share it with anybody, as it grants access to all your organization’s data. Keep it safe like your normal password.\"\n}\n[/block]\n\n[block:html]\n{\n  \"html\": \"<h4><b>Basic access authentication</b></h4>\"\n}\n[/block]\nUse “API” as username and your authentication token as password.\n[block:html]\n{\n  \"html\": \"<h4><b>Authentication passed by URL</b></h4>\"\n}\n[/block]\nYou are also able to pass your authentication token to the URL itself.\n\nAs an example: `https://api.trackunit.com/public/GetUnit?token=2D0DDB5DA32E40B382EF1E8B823E1F3D`\n[block:html]\n{\n  \"html\": \"&nbsp;\"\n}\n[/block]\n\n[block:html]\n{\n  \"html\": \"<h3>Protocol specification</h3>\"\n}\n[/block]\nDetails on the protocol and approaches supported.\n[block:callout]\n{\n  \"type\": \"info\",\n  \"title\": \"Important\",\n  \"body\": \"All examples in this documentation are based on HTTPS calls.\"\n}\n[/block]\n\n[block:html]\n{\n  \"html\": \"<h4><b>REST</b></h4>\"\n}\n[/block]\nWith REST, you specify action in HTTP verb: \n[block:parameters]\n{\n  \"data\": {\n    \"0-0\": \"`GET`\",\n    \"1-0\": \"`POST`\",\n    \"2-0\": \"`PUT`\",\n    \"3-0\": \"`DELETE`\",\n    \"0-1\": \"Used to select one or more items. Success returns 200 status code with json result item(s) in body.\",\n    \"1-1\": \"Used to create a new item. Success returns 200 status code with newly created item's Id in body.\",\n    \"2-1\": \"Used to update an item. Success returns 200 status code with no body.\",\n    \"3-1\": \"Used to delete an item. Success returns 200 status code with no body.\",\n    \"h-0\": \"Verb\",\n    \"h-1\": \"Description\"\n  },\n  \"cols\": 2,\n  \"rows\": 4\n}\n[/block]\n\n[block:html]\n{\n  \"html\": \"<h4><b>Status codes</b></h4>\"\n}\n[/block]\nAll API responses will be returned with the following code:\n[block:html]\n{\n  \"html\": \"<h4><b>Success codes</b></h4>\"\n}\n[/block]\n\n[block:parameters]\n{\n  \"data\": {\n    \"h-0\": \"Code\",\n    \"h-1\": \"Description\",\n    \"0-0\": \"200\",\n    \"0-1\": \"Success. Request completed.\"\n  },\n  \"cols\": 2,\n  \"rows\": 1\n}\n[/block]\n\n[block:html]\n{\n  \"html\": \"<h4><b>Error codes</b></h4>\"\n}\n[/block]\n\n[block:parameters]\n{\n  \"data\": {\n    \"0-0\": \"`unitNotFound`\",\n    \"0-1\": \"Unit with supplied “Id” was not found.\",\n    \"1-0\": \"`clientNotFound`\",\n    \"1-1\": \"Client with supplied “Id” was not found.\",\n    \"2-0\": \"`categoryNotFound`\",\n    \"2-1\": \"Category with supplied “Id” was not found.\",\n    \"3-0\": \"`groupNotFound`\",\n    \"3-1\": \"Group with supplied “Id” was not found.\",\n    \"4-0\": \"`invalidParameter (To)`\",\n    \"4-1\": \"The history timespan extends the limit.\",\n    \"5-0\": \"`zoneNotFound`\",\n    \"5-1\": \"Zone with supplied “Id” was not found.\",\n    \"6-0\": \"`pointNotFound`\",\n    \"6-1\": \"Point with supplied “Id” was not found.\",\n    \"h-0\": \"Code\",\n    \"h-1\": \"Description\"\n  },\n  \"cols\": 2,\n  \"rows\": 7\n}\n[/block]\n\n[block:callout]\n{\n  \"type\": \"warning\",\n  \"title\": \"Important\",\n  \"body\": \"There is a maximum timespan of 31 days for API calls.\"\n}\n[/block]\n\n[block:html]\n{\n  \"html\": \"<h4><b>Response envelope</b></h4>\"\n}\n[/block]\nAll API responses will be returned in the following envelope:\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"{\\n   \\\"list\\\":[\\n      {\\n         \\\"alarmId\\\": 70329,\\n            \\\"unitId\\\": 34333,\\n            \\\"triggeredAt\\\": \\\"2014-03-05T07:00:02.7421152Z\\\",\\n            \\\"address\\\": {\\n                \\\"country\\\": \\\"DK\\\",\\n                \\\"zipCode\\\": \\\"3000\\\",\\n                \\\"city\\\": \\\"Helsingør\\\",\\n                \\\"streetAddress\\\": \\\"Haderslevvej 16F\\\"\\n            },\\n            \\\"location\\\": {\\n                \\\"latitude\\\": 56.025985,\\n                \\\"longitude\\\": 12.5903716666667\\n            }\\n        },\\n        {\\n            \\\"alarmId\\\": 70329,\\n            \\\"unitId\\\": 39670,\\n            \\\"triggeredAt\\\": \\\"2014-03-05T07:00:02.7421152Z\\\",\\n            \\\"address\\\": {\\n                \\\"country\\\": \\\"DK\\\",\\n                \\\"zipCode\\\": \\\"2990\\\",\\n                \\\"city\\\": \\\"Nivå\\\",\\n                \\\"streetAddress\\\": \\\"Margerittens Kvarter 51\\\"\\n            },\\n            \\\"location\\\": {\\n                \\\"latitude\\\": 55.9451516666667,\\n                \\\"longitude\\\": 12.4999066666667\\n            }\\n        },\\n        {\\n            \\\"alarmId\\\": 70329,\\n            \\\"unitId\\\": 46208,\\n            \\\"triggeredAt\\\": \\\"2014-03-05T07:00:02.7421152Z\\\",\\n            \\\"address\\\": {\\n                \\\"country\\\": \\\"DK\\\",\\n                \\\"zipCode\\\": \\\"2740\\\",\\n                \\\"city\\\": \\\"Skovlunde\\\",\\n                \\\"streetAddress\\\": \\\"Harrestrupvej 166\\\"\\n            },\\n            \\\"location\\\": {\\n                \\\"latitude\\\": 55.7004533333333,\\n                \\\"longitude\\\": 12.374295\\n            }\\n        },\\n        {\\n            \\\"alarmId\\\": 70329,\\n            \\\"unitId\\\": 46209,\\n            \\\"triggeredAt\\\": \\\"2014-03-05T07:00:02.7421152Z\\\",\\n            \\\"address\\\": {\\n                \\\"country\\\": \\\"DK\\\",\\n                \\\"zipCode\\\": \\\"3060\\\",\\n                \\\"city\\\": \\\"Espergærde\\\",\\n                \\\"streetAddress\\\": \\\"Strandvejen 143A\\\"\\n            },\\n            \\\"location\\\": {\\n                \\\"latitude\\\": 55.99636,\\n                \\\"longitude\\\": 12.5639\\n            }\\n        }\\n   ]\\n}\",\n      \"language\": \"json\"\n    }\n  ]\n}\n[/block]\n\n[block:html]\n{\n  \"html\": \"<h4>List</h4>\"\n}\n[/block]\n`list` contains the resource object for a success, status code 200.\n[block:html]\n{\n  \"html\": \"<h4><b>Output format</b></h4>\"\n}\n[/block]\nThe API supports 4 response formats\n\n  * `json`\n  * `xml`\n  * `soap 1.1/1.2`\n  * `html` \n[block:html]\n{\n  \"html\": \"<h4><b>REST endpoints</b></h4>\"\n}\n[/block]\nYou can define which format you would like returned by adding a `.{format}` extension:\n  * `.json`\n  * `.xml`\n  * `.html`\n\nOr by appending `?format={format}` to the end of the URL:\n\n  * `?format=json`\n  * `?format=xml`\n  * `?format=html`\n\nExample: `https://api.trackunit.com/public/GetUnit?token=2D0DDB5DA32E40B382EF1E8B823E1F3D&format=json`\n\nAlternatively the API also recognizes which format should be used with the Accept http header:\n\n  * Accept: `application/json`\n  * Accept: `application/xml`\n\nAs you can see, this approach only works with json and xml.\n[block:html]\n{\n  \"html\": \"<h4><b>SOAP endpoints</b></h4>\"\n}\n[/block]\nThe SOAP endpoint only supports XML of course.\n[block:html]\n{\n  \"html\": \"<h4><b>SOAP</b></h4>\"\n}\n[/block]\nIf you prefer to use SOAP to access API, use your favorite tool (i.e. Visual Studio) to generate client classes from WSDL: \n\n  * SOAP 1.1: https://api.trackunit.com/public/soap11\n  * SOAP 1.2: https://api.trackunit.com/public/soap12\n\nIn this case, you need to examine the response's **ResponseStatus** field manually, to see if the request was executed successfully.\n\nIf this field is present in response (not null), you may check ErrorCode and Message attributes to find the reason of failure. \n[block:html]\n{\n  \"html\": \"&nbsp;\"\n}\n[/block]\n\n[block:html]\n{\n  \"html\": \"<h3>Data types</h3>\"\n}\n[/block]\nAn overview of data types utilized in the API, meaning both built-in data types as well as compound data types.\n[block:html]\n{\n  \"html\": \"<h4><b>Built-in</b></h4>\"\n}\n[/block]\nThe built-in data types:\n[block:parameters]\n{\n  \"data\": {\n    \"0-0\": \"`string`\",\n    \"0-1\": \"A sequence of characters\",\n    \"1-0\": \"`string[]`\",\n    \"1-1\": \"A sequence of multiple strings\",\n    \"2-0\": \"`int`\",\n    \"2-1\": \"A number that is not a fraction\",\n    \"3-0\": \"`float`\",\n    \"3-1\": \"Double-precision floating point type\",\n    \"4-0\": \"`bool`\",\n    \"4-1\": \"Logical Boolean type\",\n    \"5-0\": \"`DateTime`\",\n    \"5-1\": \"Time representation\",\n    \"h-0\": \"Short name\",\n    \"h-1\": \"Description\"\n  },\n  \"cols\": 2,\n  \"rows\": 6\n}\n[/block]\n\n[block:html]\n{\n  \"html\": \"<h4><b>Compound</b></h4>\"\n}\n[/block]\nThe compound data types:\n[block:parameters]\n{\n  \"data\": {\n    \"h-0\": \"Short name\",\n    \"h-1\": \"Description\",\n    \"0-0\": \"`Location`\",\n    \"0-1\": \"Consists of 2 `float` fields: \\n  * Latitude\\n  * Longitude\",\n    \"1-0\": \"`Address`\",\n    \"1-1\": \"Consists of 4 `string` fields: \\n  * Country (A 2-letter country code)\\n  * ZipCode\\n  * City\\n  * StreetAddress\",\n    \"2-0\": \"`AlarmRecipient`\",\n    \"2-1\": \"Consists of 5 fields:\\n  * ContactId\\n  * SentViaPhone\\n  * Number\\n  * Email\\n  * Delivered\",\n    \"3-0\": \"`TemperatureAlarmLimits`\",\n    \"3-1\": \"Consists of 4 fields: \\n  * Temperature1LowerLimit\\n  * Temperature1LowerLimit\\n  * Temperature1LowerLimit\\n  * Temperature1LowerLimit\",\n    \"4-0\": \"`ADVoltageAlarmLimits`\",\n    \"4-1\": \"Consists of 2 fields:\\n  * ADVoltageLowerLimit\\n  * ADVoltageUpperLimit\",\n    \"5-0\": \"`TimeOfDay`\",\n    \"5-1\": \"Consists of 2 fields:\\n  * Hour\\n  * Minute\"\n  },\n  \"cols\": 2,\n  \"rows\": 6\n}\n[/block]\n\n[block:html]\n{\n  \"html\": \"&nbsp;\"\n}\n[/block]\n\n[block:html]\n{\n  \"html\": \"<h3>Demo project</h3>\"\n}\n[/block]\nWe encourage you to try out the demo project.\n\nThe demo project has been designed to provide you with a basic understanding of how the API works.\n\nThe demo project is a range of C#/Visual Studio project files, which will exemplify both following approaches:\n  * [REST](http://en.wikipedia.org/wiki/Representational_state_transfer) \n  * [SOAP](https://en.wikipedia.org/wiki/SOAP)\n[block:html]\n{\n  \"html\": \"<h4><b>Download</b></h4>\"\n}\n[/block]\nPlease use the following link to download the demo project package: \n[API demo project](https://s3-eu-west-1.amazonaws.com/trackunitapi-readme.io/api_demo_v4.zip)","excerpt":"The base URL of the API is: https://api.trackunit.com/public\nMetadata can be viewed on: https://api.trackunit.com/public/metadata\n\nFeel free to point your browser to the APIs base url, and navigate the API to see how it works.","slug":"trackunit-api","type":"basic","title":"Trackunit API"}

Trackunit API

The base URL of the API is: https://api.trackunit.com/public Metadata can be viewed on: https://api.trackunit.com/public/metadata Feel free to point your browser to the APIs base url, and navigate the API to see how it works.

[block:html] { "html": "<h3>General</h3>" } [/block] The API supports different means to call: * [REST](http://en.wikipedia.org/wiki/Representational_state_transfer) * [SOAP](https://en.wikipedia.org/wiki/SOAP) * Plain HTTP with browser [block:html] { "html": "&nbsp;" } [/block] [block:html] { "html": "<h3>Authentication</h3>" } [/block] Permission to the API service is granted by use of an authentication token. To obtain your token you need to send a formal request to your Trackunit account contact. [block:callout] { "type": "info", "title": "Important", "body": "The API token must remain secret. You shouldn’t share it with anybody, as it grants access to all your organization’s data. Keep it safe like your normal password." } [/block] [block:html] { "html": "<h4><b>Basic access authentication</b></h4>" } [/block] Use “API” as username and your authentication token as password. [block:html] { "html": "<h4><b>Authentication passed by URL</b></h4>" } [/block] You are also able to pass your authentication token to the URL itself. As an example: `https://api.trackunit.com/public/GetUnit?token=2D0DDB5DA32E40B382EF1E8B823E1F3D` [block:html] { "html": "&nbsp;" } [/block] [block:html] { "html": "<h3>Protocol specification</h3>" } [/block] Details on the protocol and approaches supported. [block:callout] { "type": "info", "title": "Important", "body": "All examples in this documentation are based on HTTPS calls." } [/block] [block:html] { "html": "<h4><b>REST</b></h4>" } [/block] With REST, you specify action in HTTP verb: [block:parameters] { "data": { "0-0": "`GET`", "1-0": "`POST`", "2-0": "`PUT`", "3-0": "`DELETE`", "0-1": "Used to select one or more items. Success returns 200 status code with json result item(s) in body.", "1-1": "Used to create a new item. Success returns 200 status code with newly created item's Id in body.", "2-1": "Used to update an item. Success returns 200 status code with no body.", "3-1": "Used to delete an item. Success returns 200 status code with no body.", "h-0": "Verb", "h-1": "Description" }, "cols": 2, "rows": 4 } [/block] [block:html] { "html": "<h4><b>Status codes</b></h4>" } [/block] All API responses will be returned with the following code: [block:html] { "html": "<h4><b>Success codes</b></h4>" } [/block] [block:parameters] { "data": { "h-0": "Code", "h-1": "Description", "0-0": "200", "0-1": "Success. Request completed." }, "cols": 2, "rows": 1 } [/block] [block:html] { "html": "<h4><b>Error codes</b></h4>" } [/block] [block:parameters] { "data": { "0-0": "`unitNotFound`", "0-1": "Unit with supplied “Id” was not found.", "1-0": "`clientNotFound`", "1-1": "Client with supplied “Id” was not found.", "2-0": "`categoryNotFound`", "2-1": "Category with supplied “Id” was not found.", "3-0": "`groupNotFound`", "3-1": "Group with supplied “Id” was not found.", "4-0": "`invalidParameter (To)`", "4-1": "The history timespan extends the limit.", "5-0": "`zoneNotFound`", "5-1": "Zone with supplied “Id” was not found.", "6-0": "`pointNotFound`", "6-1": "Point with supplied “Id” was not found.", "h-0": "Code", "h-1": "Description" }, "cols": 2, "rows": 7 } [/block] [block:callout] { "type": "warning", "title": "Important", "body": "There is a maximum timespan of 31 days for API calls." } [/block] [block:html] { "html": "<h4><b>Response envelope</b></h4>" } [/block] All API responses will be returned in the following envelope: [block:code] { "codes": [ { "code": "{\n \"list\":[\n {\n \"alarmId\": 70329,\n \"unitId\": 34333,\n \"triggeredAt\": \"2014-03-05T07:00:02.7421152Z\",\n \"address\": {\n \"country\": \"DK\",\n \"zipCode\": \"3000\",\n \"city\": \"Helsingør\",\n \"streetAddress\": \"Haderslevvej 16F\"\n },\n \"location\": {\n \"latitude\": 56.025985,\n \"longitude\": 12.5903716666667\n }\n },\n {\n \"alarmId\": 70329,\n \"unitId\": 39670,\n \"triggeredAt\": \"2014-03-05T07:00:02.7421152Z\",\n \"address\": {\n \"country\": \"DK\",\n \"zipCode\": \"2990\",\n \"city\": \"Nivå\",\n \"streetAddress\": \"Margerittens Kvarter 51\"\n },\n \"location\": {\n \"latitude\": 55.9451516666667,\n \"longitude\": 12.4999066666667\n }\n },\n {\n \"alarmId\": 70329,\n \"unitId\": 46208,\n \"triggeredAt\": \"2014-03-05T07:00:02.7421152Z\",\n \"address\": {\n \"country\": \"DK\",\n \"zipCode\": \"2740\",\n \"city\": \"Skovlunde\",\n \"streetAddress\": \"Harrestrupvej 166\"\n },\n \"location\": {\n \"latitude\": 55.7004533333333,\n \"longitude\": 12.374295\n }\n },\n {\n \"alarmId\": 70329,\n \"unitId\": 46209,\n \"triggeredAt\": \"2014-03-05T07:00:02.7421152Z\",\n \"address\": {\n \"country\": \"DK\",\n \"zipCode\": \"3060\",\n \"city\": \"Espergærde\",\n \"streetAddress\": \"Strandvejen 143A\"\n },\n \"location\": {\n \"latitude\": 55.99636,\n \"longitude\": 12.5639\n }\n }\n ]\n}", "language": "json" } ] } [/block] [block:html] { "html": "<h4>List</h4>" } [/block] `list` contains the resource object for a success, status code 200. [block:html] { "html": "<h4><b>Output format</b></h4>" } [/block] The API supports 4 response formats * `json` * `xml` * `soap 1.1/1.2` * `html` [block:html] { "html": "<h4><b>REST endpoints</b></h4>" } [/block] You can define which format you would like returned by adding a `.{format}` extension: * `.json` * `.xml` * `.html` Or by appending `?format={format}` to the end of the URL: * `?format=json` * `?format=xml` * `?format=html` Example: `https://api.trackunit.com/public/GetUnit?token=2D0DDB5DA32E40B382EF1E8B823E1F3D&format=json` Alternatively the API also recognizes which format should be used with the Accept http header: * Accept: `application/json` * Accept: `application/xml` As you can see, this approach only works with json and xml. [block:html] { "html": "<h4><b>SOAP endpoints</b></h4>" } [/block] The SOAP endpoint only supports XML of course. [block:html] { "html": "<h4><b>SOAP</b></h4>" } [/block] If you prefer to use SOAP to access API, use your favorite tool (i.e. Visual Studio) to generate client classes from WSDL: * SOAP 1.1: https://api.trackunit.com/public/soap11 * SOAP 1.2: https://api.trackunit.com/public/soap12 In this case, you need to examine the response's **ResponseStatus** field manually, to see if the request was executed successfully. If this field is present in response (not null), you may check ErrorCode and Message attributes to find the reason of failure. [block:html] { "html": "&nbsp;" } [/block] [block:html] { "html": "<h3>Data types</h3>" } [/block] An overview of data types utilized in the API, meaning both built-in data types as well as compound data types. [block:html] { "html": "<h4><b>Built-in</b></h4>" } [/block] The built-in data types: [block:parameters] { "data": { "0-0": "`string`", "0-1": "A sequence of characters", "1-0": "`string[]`", "1-1": "A sequence of multiple strings", "2-0": "`int`", "2-1": "A number that is not a fraction", "3-0": "`float`", "3-1": "Double-precision floating point type", "4-0": "`bool`", "4-1": "Logical Boolean type", "5-0": "`DateTime`", "5-1": "Time representation", "h-0": "Short name", "h-1": "Description" }, "cols": 2, "rows": 6 } [/block] [block:html] { "html": "<h4><b>Compound</b></h4>" } [/block] The compound data types: [block:parameters] { "data": { "h-0": "Short name", "h-1": "Description", "0-0": "`Location`", "0-1": "Consists of 2 `float` fields: \n * Latitude\n * Longitude", "1-0": "`Address`", "1-1": "Consists of 4 `string` fields: \n * Country (A 2-letter country code)\n * ZipCode\n * City\n * StreetAddress", "2-0": "`AlarmRecipient`", "2-1": "Consists of 5 fields:\n * ContactId\n * SentViaPhone\n * Number\n * Email\n * Delivered", "3-0": "`TemperatureAlarmLimits`", "3-1": "Consists of 4 fields: \n * Temperature1LowerLimit\n * Temperature1LowerLimit\n * Temperature1LowerLimit\n * Temperature1LowerLimit", "4-0": "`ADVoltageAlarmLimits`", "4-1": "Consists of 2 fields:\n * ADVoltageLowerLimit\n * ADVoltageUpperLimit", "5-0": "`TimeOfDay`", "5-1": "Consists of 2 fields:\n * Hour\n * Minute" }, "cols": 2, "rows": 6 } [/block] [block:html] { "html": "&nbsp;" } [/block] [block:html] { "html": "<h3>Demo project</h3>" } [/block] We encourage you to try out the demo project. The demo project has been designed to provide you with a basic understanding of how the API works. The demo project is a range of C#/Visual Studio project files, which will exemplify both following approaches: * [REST](http://en.wikipedia.org/wiki/Representational_state_transfer) * [SOAP](https://en.wikipedia.org/wiki/SOAP) [block:html] { "html": "<h4><b>Download</b></h4>" } [/block] Please use the following link to download the demo project package: [API demo project](https://s3-eu-west-1.amazonaws.com/trackunitapi-readme.io/api_demo_v4.zip)