curl --request GET \
--url https://{your-subdomain}.neetodesk.com/api/external/v2/tickets \
--header 'X-Api-Key: <x-api-key>'import requests
url = "https://{your-subdomain}.neetodesk.com/api/external/v2/tickets"
headers = {"X-Api-Key": "<x-api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-Api-Key': '<x-api-key>'}};
fetch('https://{your-subdomain}.neetodesk.com/api/external/v2/tickets', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://{your-subdomain}.neetodesk.com/api/external/v2/tickets",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-Api-Key: <x-api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://{your-subdomain}.neetodesk.com/api/external/v2/tickets"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-Api-Key", "<x-api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://{your-subdomain}.neetodesk.com/api/external/v2/tickets")
.header("X-Api-Key", "<x-api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://{your-subdomain}.neetodesk.com/api/external/v2/tickets")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-Api-Key"] = '<x-api-key>'
response = http.request(request)
puts response.read_body{
"tickets": [
{
"id": "aaaabbbb-cccc-dddd-eeee-ffff00003333",
"number": 33,
"subject": "How to resolve the pending payments",
"description": "I need your help in resolving the pending payments.",
"priority": "low",
"status": "open",
"created_at": "2025-12-01T10:15:00Z",
"updated_at": "2025-12-05T14:30:00Z",
"external_id": "CP-1234",
"source": "concierge_plus",
"category": "Problem",
"sub_category_one": "Billing",
"sub_category_two": "Refund",
"group": "Sales",
"tags": [
"refund",
"urgent"
],
"assignee": {
"id": "aaaabbbb-cccc-dddd-eeee-ffff00001111",
"name": "Oliver Smith",
"email": "oliver@example.com"
},
"customer": {
"id": "aaaabbbb-cccc-dddd-eeee-ffff00002222",
"name": "John Luther",
"email": "john@example.com",
"phone_numbers": [
"+1234567890"
]
},
"fields": [
{
"field_name": "Country",
"field_value": "USA"
}
]
}
],
"pagination": {
"total_records": 95,
"total_pages": 4,
"current_page_number": 1,
"page_size": 30
}
}List tickets
Retrieves a list of tickets in a workspace.
curl --request GET \
--url https://{your-subdomain}.neetodesk.com/api/external/v2/tickets \
--header 'X-Api-Key: <x-api-key>'import requests
url = "https://{your-subdomain}.neetodesk.com/api/external/v2/tickets"
headers = {"X-Api-Key": "<x-api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-Api-Key': '<x-api-key>'}};
fetch('https://{your-subdomain}.neetodesk.com/api/external/v2/tickets', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://{your-subdomain}.neetodesk.com/api/external/v2/tickets",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-Api-Key: <x-api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://{your-subdomain}.neetodesk.com/api/external/v2/tickets"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-Api-Key", "<x-api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://{your-subdomain}.neetodesk.com/api/external/v2/tickets")
.header("X-Api-Key", "<x-api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://{your-subdomain}.neetodesk.com/api/external/v2/tickets")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-Api-Key"] = '<x-api-key>'
response = http.request(request)
puts response.read_body{
"tickets": [
{
"id": "aaaabbbb-cccc-dddd-eeee-ffff00003333",
"number": 33,
"subject": "How to resolve the pending payments",
"description": "I need your help in resolving the pending payments.",
"priority": "low",
"status": "open",
"created_at": "2025-12-01T10:15:00Z",
"updated_at": "2025-12-05T14:30:00Z",
"external_id": "CP-1234",
"source": "concierge_plus",
"category": "Problem",
"sub_category_one": "Billing",
"sub_category_two": "Refund",
"group": "Sales",
"tags": [
"refund",
"urgent"
],
"assignee": {
"id": "aaaabbbb-cccc-dddd-eeee-ffff00001111",
"name": "Oliver Smith",
"email": "oliver@example.com"
},
"customer": {
"id": "aaaabbbb-cccc-dddd-eeee-ffff00002222",
"name": "John Luther",
"email": "john@example.com",
"phone_numbers": [
"+1234567890"
]
},
"fields": [
{
"field_name": "Country",
"field_value": "USA"
}
]
}
],
"pagination": {
"total_records": 95,
"total_pages": 4,
"current_page_number": 1,
"page_size": 30
}
}{your-subdomain} with your workspace’s subdomain. Learn how to find your subdomain in Workspace subdomain.
Headers
Use the X-Api-Key header to provide your workspace API key. Refer to Authentication for more information.
Query Parameters
Retrieve paginated results by specifying the desired page number. If this parameter is absent, all results will be returned.
Set the number of results returned in the response. Defaulting to 30 when omitted.
Filter tickets by their status. Accepts comma-separated values for multiple statuses. Default statuses include: new, open, waiting_on_customer, on_hold, closed, spam, trash. Custom statuses created in your organization are also supported. If omitted, tickets of all statuses are returned.
"open"
Return only the ticket carrying this external_id. Used by an importer to
check whether a source record has already been created before posting it again.
"CP-1234"
Column to sort tickets by. If omitted, no sort is applied and tickets are returned in database order.
created_at, updated_at "created_at"
Direction to sort tickets in when sort is provided. Defaults to asc if omitted.
asc, desc "desc"
Response
OK - Request succeeded
Hide child attributes
Hide child attributes
"aaaabbbb-cccc-dddd-eeee-ffff00003333"
33
"How to resolve the pending payments"
HTML content of the ticket description.
"I need your help in resolving the pending payments."
"low"
"open"
Timestamp when the ticket was created.
"2025-12-01T10:15:00Z"
Timestamp when the ticket was last updated.
"2025-12-05T14:30:00Z"
Identifier for this ticket in the system it was imported from, if one was supplied.
"CP-1234"
Name of the system external_id refers to.
"concierge_plus"
"Problem"
"Billing"
"Refund"
Name of the assigned group.
"Sales"
["refund", "urgent"]