API Documentation

β€‹πŸ’¬ Introduction

​Desk360 API is a Representational State Transfer (REST) ​​structure that provides operations such as: β—ΎReading β—ΎModifying β—ΎAdding data β—ΎDeleting data from your help desk.

Desk360 APIs also support Cross-Origin Resource Sharing (CORS).

β€‹βœ¨ HTTP Methods

The list of API commands used by Desk360

Command

Description

GET

Fetches object(s)

POST

Creates an object

PUT

Updates/Modifies an object

All API requests must reach the secure endpoint i.e. HTTPS only

β€‹πŸ’¨ Rate Limit

This rate limit applies are based on IP address.

The limits will be company based rather than IP based in the future.

Plan

Rate Limit/Minute

Free

10

Premium

50

Business

100

Enterprise

Up to your demand. For further requests, contact us.

  • Make sure to apply the rate limit-best practices and it stays within the rate limit.

  • Make sure to make API calls in a safe layer such as your backend, not front-end or your mobile application.

  • Remind that even invalid requests are included in the rate limit.

Check your current rate limit status by looking at the following HTTP headers returned in response to each API request:

HTTP/1.1 200 OK
Content-Type: application/json
X-RateLimit-Limit: 180
X-RateLimit-Remaining: 178

Title

Description

X-RateLimit-Limit

Total number of API calls allowed per minute.

X-RateLimit-Remaining

The number of requests remaining in the current rate limit window.

X-RateLimit-Reset

The reset time in Unix epoch time format.

Retry-After

The number of seconds you should wait in order to trigger your next API request.

This header is returned only when the rate limit is reached.

If your API request is received after the rate limit is reached, Desk360 will return an error in the response. The Retry-After value in the response header will tell you how long to wait before sending another API request.

HTTP/1.1 200 OK
Content-Type: application/json
Retry-After: 26

β€‹πŸš€ Getting Started

β€‹πŸ”’ Authentication

Who can access my helpdesk? Can anyone see my data?

Before prioritizing a ticket or responding to a customer or using any of the APIs listed above, you must authenticate or log in as you sign in to your helpdesk web portal.

To authenticate the request, you can use your personal. You can access this API key directly from the panel, or you can obtain your API token with a request with your username and password.

All Desk360 API endpoints (except login) need this token in order to respond to your request.

Option 1: Obtain your token with a request.

If you enable password access from your Desk360 Panel / Settings / API you can directly use v1/login endpoint in order to create/obtain an API token. This API will return an API token if it is already created, if not it will auto-generate a token and returns it.

To make it secure, the maximum wrong login attempt is fixed to 5 per minute.

Correct attempts do not affect the limits.

get
Login

https://api.desk360.com/v1/login
Use a valid email and password pair to obtain a token.
Request
Response
Request
Body Parameters
email
required
string
An email that is already registered
password
required
string
The user's password
Response
200: OK
Your API access token return as "token"
{
"access_token": "WEFjiPUQo6FSV55RXx0T5uc5GKdmHxohsawEajAKyV1ZdUloZAExAhAAtPH1hMNbYUMsT2r7UpdN4gym",
"token_type": "Bearer"
}
cURL
C#
Java
JavaScript
PHP
Python
cURL
curl --location --request POST 'https://api.desk360.com/v1/login' \
--header 'Content-Type: application/json' \
--data-raw '{
"email": "[email protected]",
"password": "YOUR_PASSWORD"
}'
C#
var client = new RestClient("https://api.desk360.com/v1/login");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n \"email\": \"[email protected]\",\n \"password\": \"YOUR_PASSWORD\"\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
Java
OkHttpClient client = new OkHttpClient().newBuilder()
.build();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\n \"email\": \"[email protected]\",\n \"password\": \"YOUR_PASSWORD\"\n}");
Request request = new Request.Builder()
.url("https://api.desk360.com/v1/login")
.method("POST", body)
.addHeader("Content-Type", "application/json")
.build();
Response response = client.newCall(request).execute();
JavaScript
var axios = require('axios');
var data = JSON.stringify({"email":"[email protected]","password":"YOUR_PASSWORD"});
​
var config = {
method: 'post',
url: 'https://api.desk360.com/v1/login',
headers: {
'Content-Type': 'application/json'
},
data : data
};
​
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
PHP
<?php
$client = new http\Client;
$request = new http\Client\Request;
$request->setRequestUrl('https://api.desk360.com/v1/login');
$request->setRequestMethod('POST');
$body = new http\Message\Body;
$body->append('{
"email": "[email protected]",
"password": "YOUR_PASSWORD"
}');
$request->setBody($body);
$request->setOptions(array());
$request->setHeaders(array(
'Content-Type' => 'application/json'
));
$client->enqueue($request)->send();
$response = $client->getResponse();
echo $response->getBody();
Python
import requests
​
url = "https://api.desk360.com/v1/login"
​
payload="{\n \"email\": \"[email protected]\",\n \"password\": \"YOUR_PASSWORD\"\n}"
headers = {
'Content-Type': 'application/json'
}
​
response = requests.request("POST", url, headers=headers, data=payload)
​
print(response.text)
​

Option 2: Create a token from Panel

  1. Login to your Desk360 Panel.

  2. Go to Settings.

  3. Click API.

  4. Create a token for a user.

β€‹πŸ“Ž Attachments

The following endpoints are supported with attachments:

​◾Replying to a ticket β—ΎAdding a note to a ticket

Please follow the guidelines listed below:

  • Only files on a local machine can be added using the API. You can not use links!

  • Content-Type should always be multi-part/form-data for attached requests.

β€‹βŒ Errors

I received an error. How can I solve it?

API requests that cause errors will return an appropriate HTTP status code to help determine the type of error. You can use the following table to understand what each code means:

HTTP Status Code

Status Code Definition

Description

400

Client or Validation Error

The request body/query string is not in the correct format.

For example, the Create a ticket API requires the email field to be submitted as part of the request, and if it is missing, this status code is returned.

401

Authentication Failure

This indicates that the Authorization field is either missing or incorrect.

Check Authentication for more information.

404

Requested Resource not Found

The request contains an invalid ID / Desk360 domain or invalid parameters in the URL. For example, an API call to retrieve a ticket with an invalid ID will return an HTTP 404 status code to inform you that no such ticket exists.

405

Method not allowed

This API request has used the wrong HTTP method.

For example, a DELETE requested on /products endpoint will return an HTTP 405 as /products allows only GET requests.

406

Unsupported Accept Header

Only application/json and */* are supported. When uploading files multipart/form-data are supported.

415

Unsupported Content-type

Only application/json is supported.

429

Rate Limit Exceeded

The API rate limit allowed for your Desk360 domain has been exhausted. Check Rate Limit.

500

Unexpected Server Error

You can't do much more here. This indicates an error on the Desk360 side. Please email us your API script with response headers. We will contact you and fix this issue as soon as possible.

Sample error response

In addition to the HTTP status code, most errors also return a response with more information to help you troubleshoot the error. An example error response is shown below. The format of the error response is explained after the example.

"error": {
"code": "failed_validation",
"message": "The status field is required."
"doc_url": "https://docs.desk360.com/api"
}
}

Error Response Fields

Field

Description

code

Custom error code that is machine-parseable.

message

Descriptive error message.

doc_url

A link to guide you if there is a solution on the documentation.

Error Codes

Code

Description

authentication_exception

Authentication failed. The token is missing or invalid. Do not forget to put "Bearer" in the beginning of your token. eg: "Bearer YOUR-API-TOKEN"

method_not_allowed_exception

If the method and endpoint is mismatched, you will get this error. Please check the endpoint method. eg: Products only allows GET method.

not_found_exception

You may have made a typo in your request URL.

model_not_found_exception

Requested resource not found, the resource maybe deleted or maybe the resource is not yours.

internal_server_error

The error is coming from our servers. If you have been receiving this error message for a while, contact us.

insecure_request_exception

HTTP is not allowed. Use HTTPS instead.

too_many_requests_exception

Check Rate Limit.

invalid_credentials

You typed your email/password wrong.

password_access_disabled

You can enable password access from your Desk360 Panel Settings. Check Authentication to learn how to enable password access.

too_many_attempts

If you entered your email/password wrong more than 5 times, you should wait for a minute.

not_authorized

You do not have permission to modify the resource.

not_found

Requested resource not found, the resource maybe deleted or maybe the resource is not yours.

status_update_failed

Status update failed. You can only set Resolved (1) or Waiting (2), also, if the ticket is resolved you can not change the reason.

facebook_integration_error

instagram_integration_error

twitter_integration_error

Check your integration is still active from your Desk360 Panel. If it is active and you getting the error, the issue might be coming from Facebook/Twitter servers.

email_error

There is an error while sending the email. The email might be invalid.

non_custom_type

You can not update/delete non-custom types.

failed_validation

This is a validation error, please read the message and apply what it says.

β€‹πŸ“„ Pagination

API responses that return a list of objects are paginated, for example, View Ticket List. Add the parameter page to the query string to navigate through the pages. The page number starts from 1 and each page is fixed to show 20 objects.

https://api.desk360.com/api/v1/products/1/tickets?page=1

The "Link" header in the response will be showing the next page if it exists:

Headers
"Link" : <https://api.desk360.com/v1/products/1/tickets?page=2>; rel=next

If you are on the last page the link header will not be filled.

β€‹βœ… Best Practices

  • Whenever it is possible, please queue API calls on your side. This allows you to buffer recent calls to avoid reaching the rate limit. Once you reach the rate limit, retry API calls after the retry period.

  • Whenever it is feasible, cache the data that does not change much on your side. For example, the mapping between agent name and ID is extremely unlikely to change, so it is a useful approach to cache this data to avoid the rate limit.

  • Avoid making API calls directly from a mobile app, instead, send the request to your servers and make API calls from there. This ensures that if an API endpoint is changed, you can make and deploy the change on your server instead of updating your application and forcing your customers to the latest version.

β€‹πŸŽ« Products & Tickets

Apart from its competitors, Desk360 enables its customers to manage multiple products under one account. Therefore, for the ticket transactions, you must first determine the product under which you will perform these transactions. For exampleproducts/1/tickets shows tickets for the product with the Product ID 1.

In order to find your Product ID, visit Products.

get
Products

https://api.desk360.com/v1/products
List of your products.
Request
Response
Request
Headers
Authorization
required
string
Your API token
Response
200: OK
[
{
"id": 11,
"name": "YourApplication1",
"logo": null
},
{
"id": 22,
"name": "YourApplication2",
"logo": null
},
{
"id": 33,
"name": "YourApplicationWithLogo",
"logo": "https://desk-360.s3.amazonaws.com/images/application/logo/a007a5a216b668bfef9bcdbb3a31157b.jpg"
}
]

Code Samples

cURL
C#
Java
JavaScript
PHP
Python
cURL
curl --location --request GET 'https://api.desk360.com/v1/products' \
--header 'Authorization: Bearer YOUR_API_TOKEN'
C#
var client = new RestClient("https://api.desk360.com/v1/products");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Bearer YOUR_API_TOKEN");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
Java
OkHttpClient client = new OkHttpClient().newBuilder()
.build();
Request request = new Request.Builder()
.url("https://api.desk360.com/v1/products")
.method("GET", null)
.addHeader("Authorization", "Bearer YOUR_API_TOKEN")
.build();
Response response = client.newCall(request).execute();
JavaScript
var axios = require('axios');
​
var config = {
method: 'get',
url: 'https://api.desk360.com/v1/products',
headers: {
'Authorization': 'Bearer YOUR_API_TOKEN'
}
};
​
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
​
PHP
<?php
​
$curl = curl_init();
​
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://api.desk360.com/v1/products',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Authorization: Bearer YOUR_API_TOKEN'
),
));
​
$response = curl_exec($curl);
​
curl_close($curl);
echo $response;
​
Python
import requests
​
url = "https://api.desk360.com/v1/products"
​
payload={}
headers = {
'Authorization': 'Bearer YOUR_API_TOKEN'
}
​
response = requests.request("GET", url, headers=headers, data=payload)
​
print(response.text)

get
Get Ticket List

https://api.desk360.com/v1/products/:productId/tickets
Ticket list of a product. You can use this endpoint for getting the latest tickets, or with query params, you can filter/search within tickets. Query parameters can be used for filtering and searching purposes, all of the query parameters are optional.
Request
Response
Request
Path Parameters
productId
required
integer
The id of your product
Headers
Authorization
required
string
Your API token
Query Parameters
page
optional
integer
Page number if not given will start from 1
reason_id
optional
integer
Filter by the reason id
priority
optional
integer
Filter by the priority (see table below)
platform
optional
string
Filter by the platform (see table below)
start_date
optional
string
Filter by starting date as YYYY-MM-DD format (eg: 2020-05-19)
end_date
optional
string
Filter by ending date as YYYY-MM-DD format (eg: 2020-05-20)
status
optional
integer
Filter by the status of the ticket (see the table below)
agent_id
optional
integer
Filter by the id of the assigned agent
type_id
optional
integer
Filter by the ticket type id
order
optional
string
Sort by updated date order (default descending) to make ascending send query as "asc".
id
optional
integer
Search by Id of the ticket
email
optional
string
Search by Email for the ticket
name
optional
string
Search by Name of the ticket
subject
optional
string
Search by Subject of the ticket
Response
200: OK
[
{
"id": 1,
"reason_id": 2,
"type_id": 3,
"agent_id": 4,
"name": "John Doe",
"email": "[email protected]",
"subject": null,
"last_message": "Hello World!",
"channel": "Application",
"platform": "Android",
"status": 1,
"priority": 1,
"created_at": "2020-04-02 11:19:26",
"updated_at": "2021-01-17 15:58:41"
},
{
"id": 2,
"reason_id": 2,
"type_id": 3,
"agent_id": 4,
"name": "John Doe",
"email": "[email protected]",
"subject": null,
"last_message": "Hello World2!",
"channel": "Application",
"platform": "iOS",
"status": 1,
"priority": 1,
"created_at": "2020-04-02 11:19:26",
"updated_at": "2021-01-17 15:58:41"
},
]

Code Samples

cURL
C#
Java
JavaScript
PHP
Python
cURL
curl --location --request GET 'https://api.desk360.com/v1/products/1/tickets?page=1' \
--header 'Authorization: Bearer YOUR_API_TOKEN'
C#
var client = new RestClient("https://api.desk360.com/v1/products/1/tickets");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Bearer YOUR_API_TOKEN");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
Java
OkHttpClient client = new OkHttpClient().newBuilder()
.build();
Request request = new Request.Builder()
.url("https://api.desk360.com/v1/products/1/tickets")
.method("GET", null)
.addHeader("Authorization", "Bearer YOUR_API_TOKEN")
.build();
Response response = client.newCall(request).execute();
JavaScript
var axios = require('axios');
​
var config = {
method: 'get',
url: 'https://api.desk360.com/v1/products/1/tickets',
headers: {
'Authorization': 'Bearer YOUR_API_TOKEN'
}
};
​
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
​
PHP
<?php
​
$curl = curl_init();
​
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://api.desk360.com/v1/products/1/tickets',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Authorization: Bearer YOUR_API_TOKEN'
),
));
​
$response = curl_exec($curl);
​
curl_close($curl);
echo $response;
​
Python
import requests
​
url = "https://api.desk360.com/v1/products/1/tickets"
​
payload={}
headers = {
'Authorization': 'Bearer YOUR_API_TOKEN'
}
​
response = requests.request("GET", url, headers=headers, data=payload)
​
print(response.text)

Descriptive Tables

Priority
Platform
Status
Message Types
Priority

Priority

Value

Low

0

Medium

1

High

2

Urgent

3

Platform

Platform

Value

Desk360 SDK iOS contact us tickets

iOS

AppStore review tickets

AppStore

GooglePlay review tickets

GooglePlay

Web contact us tickets

Web

Desk360 SDK Android tickets

Android

Email tickets

Mail

Facebook tickets

Facebook

Twitter mention tickets

Mention

Internal created tickets

Internal

Twitter direct message tickets

DirectMessage

Twitter retweet comment tickets

RetweetComment

Twitter tweet tickets

Tweet

Facebook messenger tickets

Messenger

Status

Status

Value

Unresolved

0

Resolved

1

Waiting

2

Reopen

3

Message Types

Type

Value

Text Message

0

GIF

1

Image

2

Video

3

External Message

4

Twitter Message

5

Note

6

Auto Reply

7

Slack

8

get
Get Ticket Details

https://api.desk360.com/v1/products/:productId/tickets/:ticketId
Get the details of the ticket. It includes multiple objects such as ticket information, ticket messages.
Request
Response
Request
Path Parameters
productId
required
string
The id of your product
ticketId
required
integer
The id of the ticket
Headers
Authorization
required
string
Your API token
Response
200: OK
{
"id": 1,
"reason_id": 5,
"type_id": 9,
"agent_id": 72,
"name": "John Doe",
"email": "[email protected]",
"subject": null,
"channel": "Application",
"platform": "Android",
"status": 1,
"priority": 1,
"settings": null,
"country_code": "TR",
"star_rating": null,
"custom_fields": [],
"created_at": "2020-04-02 11:19:26",
"updated_at": "2021-01-17 15:58:41",
"messages": [
{
"id": 1,
"agent_id": 74,
"message": "Hello World",
"attachments": {
"images": [],
"videos": [],
"files": [],
"others": []
},
"type": 0,
"created_at": "2020-04-02 11:19:26",
"updated_at": "2020-04-02 11:19:26"
},
{
"id": 2,
"agent_id": 74,
"message": "Hello World2",
"attachments": {
"images": [],
"videos": [],
"files": [],
"others": []
},
"type": 0,
"created_at": "2020-04-02 11:19:46",
"updated_at": "2020-04-02 11:19:46"
}]
}

Code Samples

cURL
C#
Java
JavaScript
PHP
Python
cURL
curl --location --request GET 'https://api.desk360.com/v1/products/1/tickets/1' \
--header 'Authorization: Bearer YOUR_API_TOKEN'
C#
var client = new RestClient("https://api.desk360.com/v1/products/1/tickets/1");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Bearer YOUR_API_TOKEN");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
Java
OkHttpClient client = new OkHttpClient().newBuilder()
.build();
Request request = new Request.Builder()
.url("https://api.desk360.com/v1/products/1/tickets/1")
.method("GET", null)
.addHeader("Authorization", "Bearer YOUR_API_TOKEN")
.build();
Response response = client.newCall(request).execute();
JavaScript
var axios = require('axios');
​
var config = {
method: 'get',
url: 'https://api.desk360.com/v1/products/1/tickets/1',
headers: {
'Authorization': 'Bearer YOUR_API_TOKEN'
}
};
​
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
​
PHP
<?php
​
$curl = curl_init();
​
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://api.desk360.com/v1/products/1/tickets/1',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Authorization: Bearer YOUR_API_TOKEN'
),
));
​
$response = curl_exec($curl);
​
curl_close($curl);
echo $response;
​
Python
import requests
​
url = "https://api.desk360.com/v1/products/1/tickets/1"
​
payload={}
headers = {
'Authorization': 'Bearer YOUR_API_TOKEN'
}
​
response = requests.request("GET", url, headers=headers, data=payload)
​
print(response.text)
​

get
Get Ticket Logs

https://api.desk360.com/v1/products/:productId/tickets/:ticketId/logs
Result of the detailed ticket logs. Check Descriptive Tables to see the status options.
Request
Response
Request
Path Parameters
productId
required
string
The id of your product
ticketId
required
integer
The id of the ticket
Headers
Authorization
required
string
Your API token
Response
200: OK
[
{
"id": 1,
"old_status_id": 0,
"new_status_id": 2,
"reason_id": 5,
"agent_id": 1,
"created_at": "2020-04-02 12:15:00"
},
{
"id": 2,
"old_status_id": 2,
"new_status_id": 1,
"reason_id": 5,
"agent_id": 2,
"created_at": "2020-04-02 12:16:08"
},
]

Code Samples

cURL
C#
Java
JavaScript
PHP
Python
cURL
curl --location --request GET 'api.localhost:10380/v1/products/1/tickets/1/logs' \
--header 'Authorization: Bearer YOUR_API_TOKEN'
C#
var client = new RestClient("https://api.desk360.com/v1/products/1/tickets/1/logs");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Bearer YOUR_API_TOKEN");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
Java
OkHttpClient client = new OkHttpClient().newBuilder()
.build();
Request request = new Request.Builder()
.url("https://api.desk360.com/v1/products/1/tickets/1/logs")
.method("GET", null)
.addHeader("Authorization", "Bearer YOUR_API_TOKEN")
.build();
Response response = client.newCall(request).execute();
JavaScript
var axios = require('axios');
​
var config = {
method: 'get',
url: 'https://api.desk360.com/v1/products/1/tickets/1/logs',
headers: {
'Authorization': 'Bearer YOUR_API_TOKEN'
}
};
​
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
​
PHP
<?php
​
$curl = curl_init();
​
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://api.desk360.com/v1/products/1/tickets/1/logs',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Authorization: Bearer YOUR_API_TOKEN'
),
));
​
$response = curl_exec($curl);
​
curl_close($curl);
echo $response;
​
Python
import requests
​
url = "https://api.desk360.com/v1/products/1/tickets/1/logs"
​
payload={}
headers = {
'Authorization': 'Bearer YOUR_API_TOKEN'
}
​
response = requests.request("GET", url, headers=headers, data=payload)
​
print(response.text)
​

post
Create Ticket

https://api.desk360.com/v1/products/:productId/tickets
Create an API ticket. If you send with attachments use form-data you can also send other body parameters with form-data as well.
Request
Response
Request
Path Parameters
productId
required
string
The id of your product
Headers
Authorization
required
string
Your API token
Form Data Parameters
attachments[]
optional
object
Attachment for the ticket (Only allowed in form-data)
Body Parameters
name
required
string
Name of the customer
email
required
string
Email of the customer
reason_id
required
integer
Reason Id
description
required
string
Brief description of the ticket subject
status
required
integer
Status of the ticket (check Descriptive Tables)
assign_to_agent_id
optional
integer
Id of the assigned agent (optional)
Response
201: Created
{
"id": 123,
"reason_id": 1,
"type_id": null,
"agent_id": null,
"name": "abc",
"email": "[email protected]",
"subject": null,
"last_message": "abc",
"channel": "Api",
"platform": "Api",
"status": 1,
"priority": 0,
"created_at": "2021-01-18 10:31:57",
"updated_at": "2021-01-18 10:31:57"
}

Code Samples

cURL
C#
Java
JavaScript
PHP
Python
cURL
curl --location --request POST 'https://api.desk360.com/v1/products/1/tickets' \
--header 'Authorization: Bearer YOUR_API_TOKEN' \
--header 'Content-Type: application/json' \
--data-raw '{
"name": "John Doe",
"email": "[email protected]",
"reason_id": 1,
"description": "Hello World!",
"status": 1,
"assign_to_agent_id": 2
}'
C#
var client = new RestClient("https://api.desk360.com/v1/products/1/tickets");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Bearer YOUR_API_TOKEN");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n \"name\": \"John Doe\",\n \"email\": \"[email protected]\",\n \"reason_id\": 1,\n \"description\": \"Hello World!\",\n \"status\": 1,\n \"assign_to_agent_id\": 2\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
Java
OkHttpClient client = new OkHttpClient().newBuilder()
.build();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\n \"name\": \"John Doe\",\n \"email\": \"[email protected]\",\n \"reason_id\": 1,\n \"description\": \"Hello World!\",\n \"status\": 1,\n \"assign_to_agent_id\": 2\n}");
Request request = new Request.Builder()
.url("https://api.desk360.com/v1/products/1/tickets")
.method("POST", body)
.addHeader("Authorization", "Bearer YOUR_API_TOKEN")
.addHeader("Content-Type", "application/json")
.build();
Response response = client.newCall(request).execute();
JavaScript
var axios = require('axios');
var data = JSON.stringify({"name":"John Doe","email":"[email protected]","reason_id":1,"description":"Hello World!","status":1,"assign_to_agent_id":2});
​
var config = {
method: 'post',
url: 'https://api.desk360.com/v1/products/1/tickets',
headers: {
'Authorization': 'Bearer YOUR_API_TOKEN',
'Content-Type': 'application/json'
},
data : data
};
​
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
​
PHP
<?php
​
$curl = curl_init();
​
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://api.desk360.com/v1/products/1/tickets',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"name": "John Doe",
"email": "[email protected]",
"reason_id": 1,
"description": "Hello World!",
"status": 1,
"assign_to_agent_id": 2
}',
CURLOPT_HTTPHEADER => array(
'Authorization: Bearer YOUR_API_TOKEN',
'Content-Type: application/json'
),
));
​
$response = curl_exec($curl);
​
curl_close($curl);
echo $response;
​
Python
import requests
​
url = "https://api.desk360.com/v1/products/1/tickets"
​
payload="{\n \"name\": \"John Doe\",\n \"email\": \"[email protected]\",\n \"reason_id\": 1,\n \"description\": \"Hello World!\",\n \"status\": 1,\n \"assign_to_agent_id\": 2\n}"
headers = {
'Authorization': 'Bearer YOUR_API_TOKEN',
'Content-Type': 'application/json'
}
​
response = requests.request("POST", url, headers=headers, data=payload)
​
print(response.text)
​

post
Reply Ticket

https://api.desk360.com/v1/products/:productId/tickets/:ticketId/reply
Replying to the ticket.
Request
Response
Request
Path Parameters
productId
required
string
The id of your product
ticketId
required
string
The id of the ticket
Headers
Authorization
required
string
Your API token
Form Data Parameters
attachments[]
optional
object
Attachment for the ticket (Only allowed in form-data)
Body Parameters
message
required
string
Message content
Response
201: Created
{
"id": 747,
"agent_id": 74,
"message": "Hello World!",
"type": 0,
"attachments": {
"images": [],
"videos": [],
"files": [],
"others": []
},
"created_at": "2021-01-18 10:41:26",
"updated_at": "2021-01-18 10:41:26"
}

Code Samples

cURL
C#
Java
JavaScript
PHP
Python
cURL
curl --location --request POST 'https://api.desk360.com/v1/products/1/tickets/1/reply' \
--header 'Authorization: Bearer YOUR_API_TOKEN' \
--header 'Content-Type: application/json' \
--data-raw '{
"message": "Hello World"
}'
C#
var client = new RestClient("https://api.desk360.com/v1/products/1/tickets/1/reply");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Bearer YOUR_API_TOKEN");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n \"message\": \"Hello World!\"\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
Java
OkHttpClient client = new OkHttpClient().newBuilder()
.build();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\n \"message\": \"Hello World!\"\n}");
Request request = new Request.Builder()
.url("https://api.desk360.com/v1/products/1/tickets/1/reply")
.method("POST", body)
.addHeader("Authorization", "Bearer YOUR_API_TOKEN")
.addHeader("Content-Type", "application/json")
.build();
Response response = client.newCall(request).execute();
JavaScript
var axios = require('axios');
var data = JSON.stringify({"message":"Hello World!"});
​
var config = {
method: 'post',
url: 'https://api.desk360.com/v1/products/1/tickets/1/reply',
headers: {
'Authorization': 'Bearer YOUR_API_TOKEN',
'Content-Type': 'application/json'
},
data : data
};
​
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
​
PHP
<?php
​
$curl = curl_init();
​
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://api.desk360.com/v1/products/1/tickets/1/reply',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"message": "Hello World!"
}',
CURLOPT_HTTPHEADER => array(
'Authorization: Bearer YOUR_API_TOKEN',
'Content-Type: application/json'
),
));
​
$response = curl_exec($curl);
​
curl_close($curl);
echo $response;
​
Python
import requests
​
url = "https://api.desk360.com/v1/products/1/tickets/1/reply"
​
payload="{\n \"message\": \"Hello World!\"\n}"
headers = {
'Authorization': 'Bearer YOUR_API_TOKEN',
'Content-Type': 'application/json'
}
​
response = requests.request("POST", url, headers=headers, data=payload)
​
print(response.text)
​

post
Add Ticket Note

https://api.desk360.com/v1/products/:productId/tickets/:ticketId/reply
Add a note to the ticket. The difference between replying is that notes are only visible to the agents.
Request
Response
Request
Path Parameters
productId
required
string
The id of your product
ticketId
required
string
The id of the ticket
Headers
Authorization
required
string
Your API token
Form Data Parameters
attachments[]
optional
object
Attachment for the ticket (Only allowed in form-data)
Body Parameters
message
required
string
Message content
Response
201: Created
{
"id": 747,
"agent_id": 74,
"message": "Hello World!",
"type": 6,
"attachments": {
"images": [],
"videos": [],
"files": [],
"others": []
},
"created_at": "2021-01-18 10:41:26",
"updated_at": "2021-01-18 10:41:26"
}

Code Samples

cURL
C#
Java
JavaScript
PHP
Python
cURL
curl --location --request POST 'https://api.desk360.com/v1/products/1/tickets/1/note' \
--header 'Authorization: Bearer YOUR_API_TOKEN' \
--header 'Content-Type: application/json' \
--data-raw '{
"message": "Hello World"
}'
C#
var client = new RestClient("https://api.desk360.com/v1/products/1/tickets/1/reply");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Bearer YOUR_API_TOKEN");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n \"message\": \"Hello World!\"\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
Java
OkHttpClient client = new OkHttpClient().newBuilder()
.build();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\n \"message\": \"Hello World!\"\n}");
Request request = new Request.Builder()
.url("https://api.desk360.com/v1/products/1/tickets/1/reply")
.method("POST", body)
.addHeader("Authorization", "Bearer YOUR_API_TOKEN")
.addHeader("Content-Type", "application/json")
.build();
Response response = client.newCall(request).execute();
JavaScript
var axios = require('axios');
var data = JSON.stringify({"message":"Hello World!"});
​
var config = {
method: 'post',
url: 'https://api.desk360.com/v1/products/1/tickets/1/reply',
headers: {
'Authorization': 'Bearer YOUR_API_TOKEN',
'Content-Type': 'application/json'
},
data : data
};
​
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
​
PHP
<?php
​
$curl = curl_init();
​
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://api.desk360.com/v1/products/1/tickets/1/reply',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"message": "Hello World!"
}',
CURLOPT_HTTPHEADER => array(
'Authorization: Bearer YOUR_API_TOKEN',
'Content-Type: application/json'
),
));
​
$response = curl_exec($curl);
​
curl_close($curl);
echo $response;
​
Python
import requests
​
url = "https://api.desk360.com/v1/products/1/tickets/1/reply"
​
payload="{\n \"message\": \"Hello World!\"\n}"
headers = {
'Authorization': 'Bearer YOUR_API_TOKEN',
'Content-Type': 'application/json'
}
​
response = requests.request("POST", url, headers=headers, data=payload)
​
print(response.text)
​

post
Update Ticket Status

https://api.desk360.com/v1/products/:productId/tickets/:ticketId/reply
Update the status of the ticket such as Resolved/Waiting.
Request
Response
Request
Path Parameters
productId
required
string
The id of your product
ticketId
required
string
The id of the ticket
Headers
Authorization
required
string
Your API token