Introduction
Welcome to the DSS Keesa API! You can use this API to access Keesa API endpoints.
We have language bindings in Shell, Ruby, JavaScript (using fetch), Nodejs, and Dart! You can view code examples in the dark area to the right, and you can switch the programming language of the examples with the tabs in the top right.
Authentication
Login
To authorize, use bellow code:
require "uri"
require "net/http"
url = URI("https://dss.mv/api/v1/auth?user=user@example.com&password=Password")
http = Net::HTTP.new(url.host, url.port);
request = Net::HTTP::Post.new(url)
request["Content-Type"] = "application/x-www-form-urlencoded"
form_data = []
request.set_form form_data, 'multipart/form-data'
response = http.request(request)
puts response.read_body
var axios = require('axios');
var FormData = require('form-data');
var data = new FormData();
var config = {
method: 'post',
url: 'https://dss.mv/api/v1/auth?user=user@example.com&password=Password',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
...data.getHeaders()
},
data : data
};
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
# With shell, you can make a post request
# with content-type header set as application/x-www-form-urlencoded
# user(email address) and password params are required
curl --location --request \
POST 'https://dss.mv/api/v1/auth?user=user@example.com&password=Password' \
--header 'Content-Type: application/x-www-form-urlencoded'
var myHeaders = new Headers();
myHeaders.append("Content-Type", "application/x-www-form-urlencoded");
var formdata = new FormData();
var requestOptions = {
method: 'POST',
headers: myHeaders,
body: formdata,
redirect: 'follow'
};
fetch("https://dss.mv/api/v1/auth?user=user@example.com&password=Password", requestOptions)
.then(response => response.text())
.then(result => console.log(result))
.catch(error => console.log('error', error));
var headers = {
'Content-Type': 'application/x-www-form-urlencoded'
};
var request = http.MultipartRequest('POST', Uri.parse('https://dss.mv/api/v1/auth?user@example.com&password=Password'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
This endpoint will return a JSON structured as bellow:
{
"csrf": "nM8kfbW0EskewvNY0Mr3/0VFJ1FqrS7puG9TBmeDA78YQGvVxh5hYSx3d6eooEDTliZeCCFocU9XOSNetgSpeg==",
"access": "eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2MTQyODU5NzUsInVzZXJfaWQiOjQsInJvbGUiOiJhZG1pbiIsInVpZCI6IjNiNmQ2MjBkLWZlZTctNGQ4NS04ZjdkLWY3ZWY2YTAwNjk5ZSIsImV4cCI6MTYxNDI4NTk3NSwicnVpZCI6IjUyMjRmZTI2LTI4NTYtNDgyZi1iNjgzLWIxYjkxNTA2YzEzMSJ9.GwLlsszpt6lDf5awskjxBBj1DDE",
"access_expires_at": "2021-01-26T01:46:15.000+05:00",
"refresh": "eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2MTQyODU5NzUsInVzZXJfaWQiOjQsInVpZCI6IjUyMjRmZTI2LTI4NTYtNDgyZi1iNjgzLWIxYjkxNTA2YzEzMSIsImV4cCI6MTYxNTE0NjM3NX0.xuG0OvYpzS2dvaZiyle4lrOpOu",
"refresh_expires_at": "2021-02-08T00:46:15.000+05:00"
}
Keesa uses JWT to authenticate and authorize access to all endpoints (except login).
The "access" token from this endpoint must be used in all subsequent requests to the API. Once the access token has expired, the "refresh" token can be used to request a new access token
The access token must be sent in the Authorization header as the Bearer token
Authorization: Bearer <token>
Endpoint
https://dss.mv/api/v1/auth
HTTP Headers
| Header | Description |
|---|---|
| Content-Type | set to 'application/x-www-form-urlencoded' |
URL Parameters
| Parameter | Required | Description |
|---|---|---|
| user | true | email address of the user |
| password | true | password of the user |
Refresh Token
To receive a new access token, use bellow code:
require "uri"
require "net/http"
url = URI("https://dss.mv/api/v1/auth/refresh_token")
http = Net::HTTP.new(url.host, url.port);
request = Net::HTTP::Post.new(url)
request["Content-Type"] = "application/x-www-form-urlencoded"
request["X-Refresh-Token"] = "eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2MTQyNjA0MzEsInVzZXJfaWQiOjQsInVpZCI6Ijk5ZTQ5MTk4LTg2NTctNGYwMS1iMjY2LTMxYTk4YWM0YzhlMCIsImV4cCI6MTYxNTEyMDgzMX0.vk87uAEsGFl8bwlWnDBW4DncvkhTq4IqkaRAKElX_7Y"
form_data = []
request.set_form form_data, 'multipart/form-data'
response = http.request(request)
puts response.read_body
var axios = require('axios');
var FormData = require('form-data');
var data = new FormData();
var config = {
method: 'post',
url: 'https://dss.mv/api/v1/auth/refresh_token',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'X-Refresh-Token': 'eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2MTQyNjA0MzEsInVzZXJfaWQiOjQsInVpZCI6Ijk5ZTQ5MTk4LTg2NTctNGYwMS1iMjY2LTMxYTk4YWM0YzhlMCIsImV4cCI6MTYxNTEyMDgzMX0.vk87uAEsGFl8bwlWnDBW4DncvkhTq4IqkaRAKElX_7Y',
...data.getHeaders()
},
data : data
};
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
# Make a post request
# with content-type header set as application/x-www-form-urlencoded
# with X-Refresh-Token header set as the refresh token from the login endpoint
curl --location --request POST 'https://dss.mv/api/v1/auth/refresh_token' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--header 'X-Refresh-Token: eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2MTQyNjA0MzEsInVzZXJfaWQiOjQsInVpZCI6Ijk5ZTQ5MTk4LTg2NTctNGYwMS1iMjY2LTMxYTk4YWM0YzhlMCIsImV4cCI6MTYxNTEyMDgzMX0.vk87uAEsGFl8bwlWnDBW4DncvkhTq4IqkaRAKElX_7Y'
var myHeaders = new Headers();
myHeaders.append("Content-Type", "application/x-www-form-urlencoded");
myHeaders.append("X-Refresh-Token", "eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2MTQyNjA0MzEsInVzZXJfaWQiOjQsInVpZCI6Ijk5ZTQ5MTk4LTg2NTctNGYwMS1iMjY2LTMxYTk4YWM0YzhlMCIsImV4cCI6MTYxNTEyMDgzMX0.vk87uAEsGFl8bwlWnDBW4DncvkhTq4IqkaRAKElX_7Y");
var formdata = new FormData();
var requestOptions = {
method: 'POST',
headers: myHeaders,
body: formdata,
redirect: 'follow'
};
fetch("https://dss.mv/api/v1/auth/refresh_token", requestOptions)
.then(response => response.text())
.then(result => console.log(result))
.catch(error => console.log('error', error));
var headers = {
'Content-Type': 'application/x-www-form-urlencoded',
'X-Refresh-Token': 'eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2MTQyNjA0MzEsInVzZXJfaWQiOjQsInVpZCI6Ijk5ZTQ5MTk4LTg2NTctNGYwMS1iMjY2LTMxYTk4YWM0YzhlMCIsImV4cCI6MTYxNTEyMDgzMX0.vk87uAEsGFl8bwlWnDBW4DncvkhTq4IqkaRAKElX_7Y'
};
var request = http.MultipartRequest('POST', Uri.parse('https://dss.mv/api/v1/auth/refresh_token'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
This endpoint will return a JSON structured as bellow:
{
"csrf": "YGmUWUnFQL9bpAOkpizAWm1tI1hd9GJ7Dlwu8CJSBkIcc/GtmxCE8qMzMSNJ14zpqQV9+ZtYMIdOhsRAvTdsFg==",
"access": "eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2MTQyODcyMDMsInVzZXJfaWQiOjQsInJvbGUiOiJhZG1pbiIsInVpZCI6ImMxNDAxNzM5LWFiNTAtNDBjNS04NzZlLTBlMDc4YmNmZDhjYyIsImV4cCI6MTYxNDI4NzIwMywicnVpZCI6IjUyMjRmZTI2LTI4NTYtNDgyZi1iNjgzLWIxYjkxNTA2YzEzMSJ9.820jJ3JIg-W_lpEeZ1ixkyHwL4VKivYFu5f4PRLQA3c",
"access_expires_at": "2021-02-26T02:06:43.000+05:00"
}
The refresh token must be used to request for a new access token once the previous access token expires.
Endpoint
https://dss.mv/api/v1/auth/refresh_token
HTTP Headers
| Header | Description |
|---|---|
| Content-Type | set to 'application/x-www-form-urlencoded' |
| X-Refresh-Token | use the 'refresh' token from login response |
Tickets
Raise a Ticket
To raise a new Ticket, use below code:
require "uri"
require "net/http"
url = URI("https://dss.mv/api/v1/tickets")
http = Net::HTTP.new(url.host, url.port);
request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2MTQ1MTg0NzQsInVzZXJfaWQiOjQsInJvbGUiOiJhZG1pbiIsInVpZCI6IjZkNjg2YjhiLTEyOTQtNDQ1NC1hYjRhLWFmZmY5NzE3MDVlMSIsImV4cCI6MTYxNDUxODQ3NCwicnVpZCI6IjA5NzBmM2U2LTFmZWYtNGY4ZC1hNjFhLTE1NjA1NTNkMDgwZiJ9.mC8kYKA7_OE1ex4I3_fR-2YgFJr4f6dDIhtg1-w_yZI"
request["Content-Type"] = "application/json"
request.body = "{\r\n \"ticket\": {\r\n \"title\": \"example title\",\r\n \"description\": \"example description\",\r\n \"reference\": \"example reference\",\r\n \"ticket_type\": \"eco_support\",\r\n \"customer_id\": 20,\r\n \"priority\": 1,\r\n \"product_id\": 4,\r\n \"customer_name\": \"john doe\",\r\n \"customer_contact\": 7735241,\r\n \"category\": \"fault\"\r\n },\r\n \"eco_id\": 1\r\n}"
response = http.request(request)
puts response.read_body
var axios = require('axios');
var data = JSON.stringify({"ticket":{"title":"example title","description":"example description","reference":"example reference","ticket_type":"eco_support","customer_id":20,"priority":1,"product_id":4,"customer_name":"john doe","customer_contact":7735241,"category":"fault"},"eco_id":1});
var config = {
method: 'post',
url: 'https://dss.mv/api/v1/tickets',
headers: {
'Authorization': 'Bearer eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2MTQ1MTg0NzQsInVzZXJfaWQiOjQsInJvbGUiOiJhZG1pbiIsInVpZCI6IjZkNjg2YjhiLTEyOTQtNDQ1NC1hYjRhLWFmZmY5NzE3MDVlMSIsImV4cCI6MTYxNDUxODQ3NCwicnVpZCI6IjA5NzBmM2U2LTFmZWYtNGY4ZC1hNjFhLTE1NjA1NTNkMDgwZiJ9.mC8kYKA7_OE1ex4I3_fR-2YgFJr4f6dDIhtg1-w_yZI',
'Content-Type': 'application/json'
},
data : data
};
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
curl --location --request POST 'https://dss.mv/api/v1/tickets' \
--header 'Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2MTQ1MTg0NzQsInVzZXJfaWQiOjQsInJvbGUiOiJhZG1pbiIsInVpZCI6IjZkNjg2YjhiLTEyOTQtNDQ1NC1hYjRhLWFmZmY5NzE3MDVlMSIsImV4cCI6MTYxNDUxODQ3NCwicnVpZCI6IjA5NzBmM2U2LTFmZWYtNGY4ZC1hNjFhLTE1NjA1NTNkMDgwZiJ9.mC8kYKA7_OE1ex4I3_fR-2YgFJr4f6dDIhtg1-w_yZI' \
--header 'Content-Type: application/json' \
--data-raw '{
"ticket": {
"title": "example title",
"description": "example description",
"reference": "example reference",
"ticket_type": "eco_support",
"customer_id": 20,
"priority": 1,
"product_id": 4,
"customer_name": "john doe",
"customer_contact": 7735241,
"category": "fault"
},
"eco_id": 1
}'
var myHeaders = new Headers();
myHeaders.append("Authorization", "Bearer eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2MTQ1MTg0NzQsInVzZXJfaWQiOjQsInJvbGUiOiJhZG1pbiIsInVpZCI6IjZkNjg2YjhiLTEyOTQtNDQ1NC1hYjRhLWFmZmY5NzE3MDVlMSIsImV4cCI6MTYxNDUxODQ3NCwicnVpZCI6IjA5NzBmM2U2LTFmZWYtNGY4ZC1hNjFhLTE1NjA1NTNkMDgwZiJ9.mC8kYKA7_OE1ex4I3_fR-2YgFJr4f6dDIhtg1-w_yZI");
myHeaders.append("Content-Type", "application/json");
var raw = JSON.stringify({"ticket":{"title":"example title","description":"example description","reference":"example reference","ticket_type":"eco_support","customer_id":20,"priority":1,"product_id":4,"customer_name":"john doe","customer_contact":7735241,"category":"fault"},"eco_id":1});
var requestOptions = {
method: 'POST',
headers: myHeaders,
body: raw,
redirect: 'follow'
};
fetch("https://dss.mv/api/v1/tickets", requestOptions)
.then(response => response.text())
.then(result => console.log(result))
.catch(error => console.log('error', error));
var headers = {
'Authorization': 'Bearer eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2MTQ1MTg0NzQsInVzZXJfaWQiOjQsInJvbGUiOiJhZG1pbiIsInVpZCI6IjZkNjg2YjhiLTEyOTQtNDQ1NC1hYjRhLWFmZmY5NzE3MDVlMSIsImV4cCI6MTYxNDUxODQ3NCwicnVpZCI6IjA5NzBmM2U2LTFmZWYtNGY4ZC1hNjFhLTE1NjA1NTNkMDgwZiJ9.mC8kYKA7_OE1ex4I3_fR-2YgFJr4f6dDIhtg1-w_yZI',
'Content-Type': 'application/json'
};
var request = http.Request('POST', Uri.parse('https://dss.mv/api/v1/tickets'));
request.body = '''{\r\n "ticket": {\r\n "title": "example title",\r\n "description": "example description",\r\n "reference": "example reference",\r\n "ticket_type": "eco_support",\r\n "customer_id": 20,\r\n "priority": 1,\r\n "product_id": 4,\r\n "customer_name": "john doe",\r\n "customer_contact": 7735241,\r\n "category": "fault"\r\n },\r\n "eco_id": 1\r\n}''';
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
This endpoint will return a JSON array structured as bellow:
{
"success": {
"ticket_number": "2102001"
}
}
Post Ticket as a JSON object in the body of the request to raise a new ticket.
Endpoint
https://dss.mv/api/v1/tickets/
Method
POST
JSON Object
| Key | Value Type | Required | Details |
|---|---|---|---|
| Ticket | Object | True | Main object |
| Title | String | True | Title for the ticket |
| Description | String | True | Description of the ticket |
| Reference | String | False | Reference for ticket |
| Customer ID | Integer | - | Customer ID (required if Eco ID is not provided) |
| Priority | Integer | False | 1 or 5 |
| Product ID | Integer | True | Product ID (Check product list for ID) |
| Customer Name | String | True | Customer contact name |
| Customer Contact | Integer | True | Customer contact number |
| Category | String | True | Ticket Category (Check Ticket Category list) |
| Ticket Type | String | True | Ticket Ticket Type (Check Ticket Ticket Type list) |
| Eco ID | Integer | - | Eco ID (required if Customer ID is not provided) |
HTTP Headers
| Header | Description |
|---|---|
| Authorization | Bearer token set to access token |
| Content-Type | application/json |
Get All Tickets
To fetch all tickets for a user, use below code:
require "uri"
require "net/http"
url = URI("https://dss.mv/api/v1/tickets")
http = Net::HTTP.new(url.host, url.port);
request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2MTQyNjY1NTEsInVzZXJfaWQiOjQsInJvbGUiOiJhZG1pbiIsInVpZCI6ImFhZGE3ZGEwLWIxNWItNDEyNi05ZmVlLTAxOGUxMzliYTE0NSIsImV4cCI6MTYxNDI2NjU1MSwicnVpZCI6IjYxMWFiZmU0LWFmMzQtNDQ5NC05MjJiLWQ5YTkxZTAzMGRjYyJ9.OAE-eQzNj1PdnXYyafTLzdLlrBCmhe353urtsen8MU4"
response = http.request(request)
puts response.read_body
var axios = require('axios');
var config = {
method: 'get',
url: 'https://dss.mv/api/v1/tickets',
headers: {
'Authorization': 'Bearer eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2MTQyNjY1NTEsInVzZXJfaWQiOjQsInJvbGUiOiJhZG1pbiIsInVpZCI6ImFhZGE3ZGEwLWIxNWItNDEyNi05ZmVlLTAxOGUxMzliYTE0NSIsImV4cCI6MTYxNDI2NjU1MSwicnVpZCI6IjYxMWFiZmU0LWFmMzQtNDQ5NC05MjJiLWQ5YTkxZTAzMGRjYyJ9.OAE-eQzNj1PdnXYyafTLzdLlrBCmhe353urtsen8MU4'
}
};
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
curl --location --request GET 'https://dss.mv/api/v1/tickets' \
--header 'Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2MTQyNjY1NTEsInVzZXJfaWQiOjQsInJvbGUiOiJhZG1pbiIsInVpZCI6ImFhZGE3ZGEwLWIxNWItNDEyNi05ZmVlLTAxOGUxMzliYTE0NSIsImV4cCI6MTYxNDI2NjU1MSwicnVpZCI6IjYxMWFiZmU0LWFmMzQtNDQ5NC05MjJiLWQ5YTkxZTAzMGRjYyJ9.OAE-eQzNj1PdnXYyafTLzdLlrBCmhe353urtsen8MU4'
var myHeaders = new Headers();
myHeaders.append("Authorization", "Bearer eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2MTQyNjY1NTEsInVzZXJfaWQiOjQsInJvbGUiOiJhZG1pbiIsInVpZCI6ImFhZGE3ZGEwLWIxNWItNDEyNi05ZmVlLTAxOGUxMzliYTE0NSIsImV4cCI6MTYxNDI2NjU1MSwicnVpZCI6IjYxMWFiZmU0LWFmMzQtNDQ5NC05MjJiLWQ5YTkxZTAzMGRjYyJ9.OAE-eQzNj1PdnXYyafTLzdLlrBCmhe353urtsen8MU4");
var requestOptions = {
method: 'GET',
headers: myHeaders,
redirect: 'follow'
};
fetch("https://dss.mv/api/v1/tickets", requestOptions)
.then(response => response.text())
.then(result => console.log(result))
.catch(error => console.log('error', error));
var headers = {
'Authorization': 'Bearer eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2MTQyNjY1NTEsInVzZXJfaWQiOjQsInJvbGUiOiJhZG1pbiIsInVpZCI6ImFhZGE3ZGEwLWIxNWItNDEyNi05ZmVlLTAxOGUxMzliYTE0NSIsImV4cCI6MTYxNDI2NjU1MSwicnVpZCI6IjYxMWFiZmU0LWFmMzQtNDQ5NC05MjJiLWQ5YTkxZTAzMGRjYyJ9.OAE-eQzNj1PdnXYyafTLzdLlrBCmhe353urtsen8MU4'
};
var request = http.Request('GET', Uri.parse('https://dss.mv/api/v1/tickets'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
This endpoint will return a JSON array structured as bellow:
{
"data": {
"tickets": [
{
"id": 2011046,
"title": "fix our Fax line",
"customer": "Customer X",
"description": "Fix fax line issues ",
"status": "open",
"contact_number": 7000111,
"contact_name": "John",
"raised_on": "2020-11-07T14:04:19.033+05:00",
"raised_by": "Jane Doe",
"assigned_to": "Doe",
"ticket_type": "roc_support",
"category": "service_order",
"image_urls": [],
"closed_date": "not closed",
"ticket_notes": [
{
"comment": "<div><strong>sample comment<br></strong>something</div><ul><li>bullets</li></ul>",
"added_on": "2020-11-22T12:07:36.811+05:00",
"commented_by": "John Doe (John)"
}
]
}
]
}
}
To fetch all the ticket related to the logged in user, make a GET request with the access token from the login request.
This will fetch all the open tickets for the logged in user (tickets assigned to or raised by the user)
Endpoint
https://dss.mv/api/v1/tickets/
Method
GET
HTTP Headers
| Header | Description |
|---|---|
| Authorization | Bearer token set to access token |
Get Tickets by Ticket Type
To fetch tickets by ticket type, use below code:
require "uri"
require "net/http"
url = URI("https://dss.mv/api/v1/tickets/tickets_by_type?limit=10&order=asc")
http = Net::HTTP.new(url.host, url.port);
request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2MTQ1MTg0NzQsInVzZXJfaWQiOjQsInJvbGUiOiJhZG1pbiIsInVpZCI6IjZkNjg2YjhiLTEyOTQtNDQ1NC1hYjRhLWFmZmY5NzE3MDVlMSIsImV4cCI6MTYxNDUxODQ3NCwicnVpZCI6IjA5NzBmM2U2LTFmZWYtNGY4ZC1hNjFhLTE1NjA1NTNkMDgwZiJ9.mC8kYKA7_OE1ex4I3_fR-2YgFJr4f6dDIhtg1-w_yZI"
request["Content-Type"] = "application/json"
request.body = "{ \"ticket\": { \"type\": \"customer_support\", \"status\": \"open\"} }"
response = http.request(request)
puts response.read_body
var axios = require('axios');
var data = JSON.stringify({"ticket":{"type":"customer_support","status":"open"}});
var config = {
method: 'get',
url: 'https://dss.mv/api/v1/tickets/tickets_by_type?limit=10&order=asc',
headers: {
'Authorization': 'Bearer eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2MTQ1MTg0NzQsInVzZXJfaWQiOjQsInJvbGUiOiJhZG1pbiIsInVpZCI6IjZkNjg2YjhiLTEyOTQtNDQ1NC1hYjRhLWFmZmY5NzE3MDVlMSIsImV4cCI6MTYxNDUxODQ3NCwicnVpZCI6IjA5NzBmM2U2LTFmZWYtNGY4ZC1hNjFhLTE1NjA1NTNkMDgwZiJ9.mC8kYKA7_OE1ex4I3_fR-2YgFJr4f6dDIhtg1-w_yZI',
'Content-Type': 'application/json'
},
data : data
};
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
curl --location --request GET 'https://dss.mv/api/v1/tickets/tickets_by_type?limit=10&order=asc' \
--header 'Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2MTQ1MTg0NzQsInVzZXJfaWQiOjQsInJvbGUiOiJhZG1pbiIsInVpZCI6IjZkNjg2YjhiLTEyOTQtNDQ1NC1hYjRhLWFmZmY5NzE3MDVlMSIsImV4cCI6MTYxNDUxODQ3NCwicnVpZCI6IjA5NzBmM2U2LTFmZWYtNGY4ZC1hNjFhLTE1NjA1NTNkMDgwZiJ9.mC8kYKA7_OE1ex4I3_fR-2YgFJr4f6dDIhtg1-w_yZI' \
--header 'Content-Type: application/json' \
--data-raw '{ "ticket": { "type": "customer_support", "status": "open"} }'
var myHeaders = new Headers();
myHeaders.append("Authorization", "Bearer eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2MTQ1MTg0NzQsInVzZXJfaWQiOjQsInJvbGUiOiJhZG1pbiIsInVpZCI6IjZkNjg2YjhiLTEyOTQtNDQ1NC1hYjRhLWFmZmY5NzE3MDVlMSIsImV4cCI6MTYxNDUxODQ3NCwicnVpZCI6IjA5NzBmM2U2LTFmZWYtNGY4ZC1hNjFhLTE1NjA1NTNkMDgwZiJ9.mC8kYKA7_OE1ex4I3_fR-2YgFJr4f6dDIhtg1-w_yZI");
myHeaders.append("Content-Type", "application/json");
var raw = JSON.stringify({"ticket":{"type":"customer_support","status":"open"}});
var requestOptions = {
method: 'GET',
headers: myHeaders,
body: raw,
redirect: 'follow'
};
fetch("https://dss.mv/api/v1/tickets/tickets_by_type?limit=10&order=asc", requestOptions)
.then(response => response.text())
.then(result => console.log(result))
.catch(error => console.log('error', error));
var headers = {
'Authorization': 'Bearer eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2MTQ1MTg0NzQsInVzZXJfaWQiOjQsInJvbGUiOiJhZG1pbiIsInVpZCI6IjZkNjg2YjhiLTEyOTQtNDQ1NC1hYjRhLWFmZmY5NzE3MDVlMSIsImV4cCI6MTYxNDUxODQ3NCwicnVpZCI6IjA5NzBmM2U2LTFmZWYtNGY4ZC1hNjFhLTE1NjA1NTNkMDgwZiJ9.mC8kYKA7_OE1ex4I3_fR-2YgFJr4f6dDIhtg1-w_yZI',
'Content-Type': 'application/json'
};
var request = http.Request('GET', Uri.parse('https://dss.mv/api/v1/tickets/tickets_by_type?limit=10&order=asc'));
request.body = '''{ "ticket": { "type": "customer_support", "status": "open"} }''';
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
This endpoint will return a JSON array structured as bellow:
{
"data": {
"count": 1,
"tickets": [
{
"id": 2009004,
"title": "MoE DS Monitoring",
"customer": "Customer X",
"description": "Check monitoring for 2 schools",
"status": "open",
"priority": 5,
"contact_number": 7000111,
"contact_name": "Mr. Doe",
"raised_on": "2020-09-01T10:58:37.528+05:00",
"raised_by": "John Doe",
"assigned_to": "John Doe",
"ticket_type": "customer_support",
"category": null,
"image_urls": [],
"closed_date": "not closed",
"ticket_notes": [
{
"comment": "auto discovery in progress",
"added_on": "2020-09-01T11:06:12.223+05:00",
"commented_by": "John Doe (John)"
},
{
"comment": "N Manadhoo\r\nM Muli\r\nSh Maaungoodhoo",
"added_on": "2020-10-13T10:07:59.727+05:00",
"commented_by": "John Doe (John)"
}
]
}
]
}
}
To fetch tickets by ticket type, make a GET request with the access token from the login request.
This will fetch the last 10 tickets with this ticket type. To fetch more tickets or to sort the tickets use limit and order parameters respectively.
Endpoint
https://dss.mv/api/v1/tickets/tickets_by_type
Method
GET
URL Parameters
| Parameter | Required | Description |
|---|---|---|
| limit | false | specify the number of tickets to be fetched |
| order | false | order the tickets (use 'asc' or 'desc') |
JSON Object
| Key | Value Type | Required | Details |
|---|---|---|---|
| Ticket | Object | True | Main object |
| Type | String | True | Ticket Ticket Type (Check Ticket Ticket Type list) |
| Status | Integer | True | Status of the ticket (Check Ticket statuses list) |
HTTP Headers
| Header | Description |
|---|---|
| Authorization | Bearer token set to access token |
Get Specific Ticket
To fetch details for a specific ticket, use the code below:
require "uri"
require "net/http"
url = URI("https://dss.mv/api/v1/tickets/2012001")
http = Net::HTTP.new(url.host, url.port);
request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2MTQyNjY1NTEsInVzZXJfaWQiOjQsInJvbGUiOiJhZG1pbiIsInVpZCI6ImFhZGE3ZGEwLWIxNWItNDEyNi05ZmVlLTAxOGUxMzliYTE0NSIsImV4cCI6MTYxNDI2NjU1MSwicnVpZCI6IjYxMWFiZmU0LWFmMzQtNDQ5NC05MjJiLWQ5YTkxZTAzMGRjYyJ9.OAE-eQzNj1PdnXYyafTLzdLlrBCmhe353urtsen8MU4"
response = http.request(request)
puts response.read_body
var axios = require('axios');
var config = {
method: 'get',
url: 'https://dss.mv/api/v1/tickets/2012001',
headers: {
'Authorization': 'Bearer eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2MTQyNjY1NTEsInVzZXJfaWQiOjQsInJvbGUiOiJhZG1pbiIsInVpZCI6ImFhZGE3ZGEwLWIxNWItNDEyNi05ZmVlLTAxOGUxMzliYTE0NSIsImV4cCI6MTYxNDI2NjU1MSwicnVpZCI6IjYxMWFiZmU0LWFmMzQtNDQ5NC05MjJiLWQ5YTkxZTAzMGRjYyJ9.OAE-eQzNj1PdnXYyafTLzdLlrBCmhe353urtsen8MU4'
}
};
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
curl --location --request GET 'https://dss.mv/api/v1/tickets/2012001' \
--header 'Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2MTQyNjY1NTEsInVzZXJfaWQiOjQsInJvbGUiOiJhZG1pbiIsInVpZCI6ImFhZGE3ZGEwLWIxNWItNDEyNi05ZmVlLTAxOGUxMzliYTE0NSIsImV4cCI6MTYxNDI2NjU1MSwicnVpZCI6IjYxMWFiZmU0LWFmMzQtNDQ5NC05MjJiLWQ5YTkxZTAzMGRjYyJ9.OAE-eQzNj1PdnXYyafTLzdLlrBCmhe353urtsen8MU4'
var myHeaders = new Headers();
myHeaders.append("Authorization", "Bearer eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2MTQyNjY1NTEsInVzZXJfaWQiOjQsInJvbGUiOiJhZG1pbiIsInVpZCI6ImFhZGE3ZGEwLWIxNWItNDEyNi05ZmVlLTAxOGUxMzliYTE0NSIsImV4cCI6MTYxNDI2NjU1MSwicnVpZCI6IjYxMWFiZmU0LWFmMzQtNDQ5NC05MjJiLWQ5YTkxZTAzMGRjYyJ9.OAE-eQzNj1PdnXYyafTLzdLlrBCmhe353urtsen8MU4");
var requestOptions = {
method: 'GET',
headers: myHeaders,
redirect: 'follow'
};
fetch("https://dss.mv/api/v1/tickets/2012001", requestOptions)
.then(response => response.text())
.then(result => console.log(result))
.catch(error => console.log('error', error));
var headers = {
'Authorization': 'Bearer eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2MTQyNjY1NTEsInVzZXJfaWQiOjQsInJvbGUiOiJhZG1pbiIsInVpZCI6ImFhZGE3ZGEwLWIxNWItNDEyNi05ZmVlLTAxOGUxMzliYTE0NSIsImV4cCI6MTYxNDI2NjU1MSwicnVpZCI6IjYxMWFiZmU0LWFmMzQtNDQ5NC05MjJiLWQ5YTkxZTAzMGRjYyJ9.OAE-eQzNj1PdnXYyafTLzdLlrBCmhe353urtsen8MU4'
};
var request = http.Request('GET', Uri.parse('https://dss.mv/api/v1/tickets/2012001'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
This endpoint will return a JSON structured as bellow:
{
"data": {
"ticket": {
"id": 2012001,
"title": "588 port change",
"customer": "Customer Y",
"description": "588 port change",
"status": "closed",
"contact_number": 7000011,
"contact_name": "John",
"raised_on": "2020-12-01T10:58:50.050+05:00",
"raised_by": "John Doe",
"assigned_to": "John Doe",
"ticket_type": null,
"category": "service_order",
"image_urls": [],
"closed_date": "2020-12-01T00:00:00.000+05:00",
"ticket_notes": [
{
"comment": "port changed",
"added_on": "2020-11-30T18:30:30.714+05:00",
"commented_by": "John Doe (John)"
}
]
}
}
}
Pass the ticket number to the endpoint to receive the details of a specific ticket.
Endpoint
https://dss.mv/api/v1/tickets/<ticket_number>
Method
GET
HTTP Headers
| Header | Description |
|---|---|
| Authorization | Bearer token set to access token |
Add Ticket Note
To add a note for a ticket, use below code:
require "uri"
require "net/http"
url = URI("http://127.0.0.1:3000/api/v1/tickets/add_ticket_note")
http = Net::HTTP.new(url.host, url.port);
request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2MjE0Mzc3MjUsInVzZXJfaWQiOjQsInJvbGUiOiJhZG1pbiIsInVpZCI6IjNkOTdhNDQ1LTRkZWEtNGZiOC05NzI0LTE5OTdjOTRiYjMwMCIsImV4cCI6MTYyMTQzNzcyNSwicnVpZCI6Ijk3MjYyNGRkLTZmZTItNDQxZS05MGQyLTM2MmU5NGQ5ZjY1NiJ9._I0zlIGcMxSfoRSxJVQnsKSeJ8WP9gtrFBjMCoJ4RhY"
request["Content-Type"] = "application/json"
request.body = "{\"ticket_note\": {\"note\": \"test ticket note\"},\"ticket_number\": \"2008022\"\}"
response = http.request(request)
puts response.read_body
var axios = require('axios');
var data = JSON.stringify({"ticket_note":{"note":"test ticket note"},"ticket_number":"2008022"});
var config = {
method: 'post',
url: 'http://127.0.0.1:3000/api/v1/tickets/add_ticket_note',
headers: {
'Authorization': 'Bearer eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2MjE0Mzc3MjUsInVzZXJfaWQiOjQsInJvbGUiOiJhZG1pbiIsInVpZCI6IjNkOTdhNDQ1LTRkZWEtNGZiOC05NzI0LTE5OTdjOTRiYjMwMCIsImV4cCI6MTYyMTQzNzcyNSwicnVpZCI6Ijk3MjYyNGRkLTZmZTItNDQxZS05MGQyLTM2MmU5NGQ5ZjY1NiJ9._I0zlIGcMxSfoRSxJVQnsKSeJ8WP9gtrFBjMCoJ4RhY',
'Content-Type': 'application/json'
},
data : data
};
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
curl --location --request POST 'http://127.0.0.1:3000/api/v1/tickets/add_ticket_note' \
--header 'Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2MjE0Mzc3MjUsInVzZXJfaWQiOjQsInJvbGUiOiJhZG1pbiIsInVpZCI6IjNkOTdhNDQ1LTRkZWEtNGZiOC05NzI0LTE5OTdjOTRiYjMwMCIsImV4cCI6MTYyMTQzNzcyNSwicnVpZCI6Ijk3MjYyNGRkLTZmZTItNDQxZS05MGQyLTM2MmU5NGQ5ZjY1NiJ9._I0zlIGcMxSfoRSxJVQnsKSeJ8WP9gtrFBjMCoJ4RhY' \
--header 'Content-Type: application/json' \
--data-raw '{"ticket_note": {"note": "test ticket note"},"ticket_number": "2008022"}'
var myHeaders = new Headers();
myHeaders.append("Authorization", "Bearer eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2MjE0Mzc3MjUsInVzZXJfaWQiOjQsInJvbGUiOiJhZG1pbiIsInVpZCI6IjNkOTdhNDQ1LTRkZWEtNGZiOC05NzI0LTE5OTdjOTRiYjMwMCIsImV4cCI6MTYyMTQzNzcyNSwicnVpZCI6Ijk3MjYyNGRkLTZmZTItNDQxZS05MGQyLTM2MmU5NGQ5ZjY1NiJ9._I0zlIGcMxSfoRSxJVQnsKSeJ8WP9gtrFBjMCoJ4RhY");
myHeaders.append("Content-Type", "application/json");
var raw = JSON.stringify({"ticket_note":{"note":"test ticket note"},"ticket_number":"2008022"});
var requestOptions = {
method: 'POST',
headers: myHeaders,
body: raw,
redirect: 'follow'
};
fetch("http://127.0.0.1:3000/api/v1/tickets/add_ticket_note", requestOptions)
.then(response => response.text())
.then(result => console.log(result))
.catch(error => console.log('error', error));
var headers = {
'Authorization': 'Bearer eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2MjE0Mzc3MjUsInVzZXJfaWQiOjQsInJvbGUiOiJhZG1pbiIsInVpZCI6IjNkOTdhNDQ1LTRkZWEtNGZiOC05NzI0LTE5OTdjOTRiYjMwMCIsImV4cCI6MTYyMTQzNzcyNSwicnVpZCI6Ijk3MjYyNGRkLTZmZTItNDQxZS05MGQyLTM2MmU5NGQ5ZjY1NiJ9._I0zlIGcMxSfoRSxJVQnsKSeJ8WP9gtrFBjMCoJ4RhY',
'Content-Type': 'application/json'
};
var request = http.Request('POST', Uri.parse('http://127.0.0.1:3000/api/v1/tickets/add_ticket_note'));
request.body = '''{"ticket_note": {"note": "test ticket note"},"ticket_number": "2008022"}''';
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
This endpoint will return a JSON array structured as bellow:
{
"success": {
"ticket_number": "2008022",
"comment": "test ticket note"
}
}
To add a note to a ticket, make a POST request with the access token from the login request with the ticket number and ticket note.
This will add the supplied note to the specified ticket.
Endpoint
https://dss.mv/api/v1/tickets/add_ticket_note
Method
POST
JSON Object
| Key | Value Type | Required | Details |
|---|---|---|---|
| Ticket Note | Object | True | Ticket Note Object |
| Note | String | True | Note (attribute of ticket_note) |
| Ticket Number | String | True | Ticket number |
HTTP Headers
| Header | Description |
|---|---|
| Authorization | Bearer token set to access token |
Get Ticket Notes
To fetch the notes for a ticket, use below code:
require "uri"
require "net/http"
url = URI("http://127.0.0.1:3000/api/v1/tickets/get_ticket_notes")
http = Net::HTTP.new(url.host, url.port);
request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2MjE0Mzc3MjUsInVzZXJfaWQiOjQsInJvbGUiOiJhZG1pbiIsInVpZCI6IjNkOTdhNDQ1LTRkZWEtNGZiOC05NzI0LTE5OTdjOTRiYjMwMCIsImV4cCI6MTYyMTQzNzcyNSwicnVpZCI6Ijk3MjYyNGRkLTZmZTItNDQxZS05MGQyLTM2MmU5NGQ5ZjY1NiJ9._IOzlIGcMxSfoRSxJVQnsKSeJ8WP9gtrFBjMCoJ4RhY"
request["Content-Type"] = "application/json"
request.body = "{\"ticket_number\": \"2008022\"}"
response = http.request(request)
puts response.read_body
var axios = require('axios');
var data = JSON.stringify({"ticket_number":"2008022"});
var config = {
method: 'get',
url: 'http://127.0.0.1:3000/api/v1/tickets/get_ticket_notes',
headers: {
'Authorization': 'Bearer eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2MjE0Mzc3MjUsInVzZXJfaWQiOjQsInJvbGUiOiJhZG1pbiIsInVpZCI6IjNkOTdhNDQ1LTRkZWEtNGZiOC05NzI0LTE5OTdjOTRiYjMwMCIsImV4cCI6MTYyMTQzNzcyNSwicnVpZCI6Ijk3MjYyNGRkLTZmZTItNDQxZS05MGQyLTM2MmU5NGQ5ZjY1NiJ9._IOzlIGcMxSfoRSxJVQnsKSeJ8WP9gtrFBjMCoJ4RhY',
'Content-Type': 'application/json'
},
data : data
};
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
curl --location --request GET 'http://127.0.0.1:3000/api/v1/tickets/get_ticket_notes' \
--header 'Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2MjE0Mzc3MjUsInVzZXJfaWQiOjQsInJvbGUiOiJhZG1pbiIsInVpZCI6IjNkOTdhNDQ1LTRkZWEtNGZiOC05NzI0LTE5OTdjOTRiYjMwMCIsImV4cCI6MTYyMTQzNzcyNSwicnVpZCI6Ijk3MjYyNGRkLTZmZTItNDQxZS05MGQyLTM2MmU5NGQ5ZjY1NiJ9._IOzlIGcMxSfoRSxJVQnsKSeJ8WP9gtrFBjMCoJ4RhY' \
--header 'Content-Type: application/json' \
--data-raw '{"ticket_number": "2008022"}'
var myHeaders = new Headers();
myHeaders.append("Authorization", "Bearer eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2MjE0Mzc3MjUsInVzZXJfaWQiOjQsInJvbGUiOiJhZG1pbiIsInVpZCI6IjNkOTdhNDQ1LTRkZWEtNGZiOC05NzI0LTE5OTdjOTRiYjMwMCIsImV4cCI6MTYyMTQzNzcyNSwicnVpZCI6Ijk3MjYyNGRkLTZmZTItNDQxZS05MGQyLTM2MmU5NGQ5ZjY1NiJ9._I0zlIGcMxSfoRSxJVQnsKSeJ8WP9gtrFBjMCoJ4RhY");
myHeaders.append("Content-Type", "application/json");
var raw = JSON.stringify({"ticket_number":"2008022"});
var requestOptions = {
method: 'GET',
headers: myHeaders,
body: raw,
redirect: 'follow'
};
fetch("http://127.0.0.1:3000/api/v1/tickets/get_ticket_notes", requestOptions)
.then(response => response.text())
.then(result => console.log(result))
.catch(error => console.log('error', error));
var headers = {
'Authorization': 'Bearer eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2MjE0Mzc3MjUsInVzZXJfaWQiOjQsInJvbGUiOiJhZG1pbiIsInVpZCI6IjNkOTdhNDQ1LTRkZWEtNGZiOC05NzI0LTE5OTdjOTRiYjMwMCIsImV4cCI6MTYyMTQzNzcyNSwicnVpZCI6Ijk3MjYyNGRkLTZmZTItNDQxZS05MGQyLTM2MmU5NGQ5ZjY1NiJ9._I0zlIGcMxSfoRSxJVQnsKSeJ8WP9gtrFBjMCoJ4RhY',
'Content-Type': 'application/json'
};
var request = http.Request('GET', Uri.parse('http://127.0.0.1:3000/api/v1/tickets/get_ticket_notes'));
request.body = '''{\r\n "ticket_number": "2008022"\r\n}''';
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
This endpoint will return a JSON array structured as bellow:
{
"data": {
"count": 1,
"notes": [
{
"id": 271,
"note": "digital phone type changed",
"user_name": "John Doe",
"user_nick": "John",
"commented_on": "18:30 11/08/2020"
},
{
"id": 272,
"note": "port changed",
"user_name": "John Doe",
"user_nick": "John",
"commented_on": "20:30 11/08/2020"
}
]
}
}
To fetch the notes added to a ticket, make a GET request with the access token from the login request.
This will fetch all the notes for that ticket.
Endpoint
https://dss.mv/api/v1/tickets/get_ticket_notes
Method
GET
JSON Object
| Key | Value Type | Required | Details |
|---|---|---|---|
| Ticket Number | String | True | Ticket number |
HTTP Headers
| Header | Description |
|---|---|
| Authorization | Bearer token set to access token |
Response Codes
DSS Keesa API uses the following error codes:
Error Codes
| Code | Meaning |
|---|---|
| 400 | Bad Request -- Your request is invalid. |
| 401 | Unauthorized -- Your access token has expired or is invalid. |
| 403 | Forbidden -- You're not authorized to access this resource. |
| 404 | Not Found -- The specified resource could not be found. |
| 418 | I'm a teapot -- Keesa server refuses the attempt to brew coffee with a teapot. |
| 422 | Unprocessable Entity -- Requested data could not be processed. |
| 500 | Internal Server Error -- We had a problem with our server. Try again later. |
| 503 | Service Unavailable -- We're temporarily offline for maintenance. Please try again later. |
Success Codes
| Code | Meaning |
|---|---|
| 200 | OK -- Your request has succeeded. |
| 201 | Created -- The new resource you sent has been successfully created. |
| 202 | Accepted -- Your request has been accepted. |
| 204 | No Content -- Response has no content for the request. |
Reference List
Products
| ID | Product |
|---|---|
| 1 | PABX |
| 2 | Switch |
| 3 | Router |
| 4 | WIFI |
| 5 | DATA |
| 6 | GPON |
| 7 | Networks - Admin |
| 8 | Networks - Staff |
| 9 | Networks - Guest |
| 10 | CCTV Network |
| 11 | CCTV Servers |
| 12 | iHTV |
| 13 | Survey |
| 14 | CATV |
| 15 | TEL NETWORK |
| 16 | CORE NETWORK |
| 17 | IPTV |
| 18 | GATEWAY |
| 19 | Rejected - NWR |
| 20 | Access Control |
| 21 | Pending Classification |
| 22 | School Network |
| 23 | DJA Network |
| 24 | Eco |
Ticket Category
| Category | Key |
|---|---|
| Service Order | service_order |
| Fault | fault |
| Survey | survey |
Ticket Types
| Type | Key |
|---|---|
| ROC Support | roc_support |
| Project Support | project_support |
| Remote PMC | remote_support |
| Cross Department Support | cross_department_support |
| Customer Support | customer_support |
| Eco Support | eco_support |
| Routine Maintenance | routine_maintenance |