curl --request PUT \
--url https://{your-subdomain}.neetodesk.com/api/external/v2/tickets/{ticket_id} \
--header 'Content-Type: application/json' \
--header 'X-Api-Key: <x-api-key>' \
--data '
{
"email": "john@example.com",
"subject": "How to resolve the pending payments",
"description": "I need your help in resolving the pending payments.",
"ticket_fields": {
"Country": "USA"
},
"status": "closed",
"priority": "urgent",
"category": "Problem",
"sub_category_one": "Billing",
"sub_category_two": "Refund",
"group": "sales",
"assignee_email": "oliver@example.com",
"tags": [
"refund",
"urgent"
],
"resolution_due_date": "2025-12-31T23:59:59Z"
}
'import requests
url = "https://{your-subdomain}.neetodesk.com/api/external/v2/tickets/{ticket_id}"
payload = {
"email": "john@example.com",
"subject": "How to resolve the pending payments",
"description": "I need your help in resolving the pending payments.",
"ticket_fields": { "Country": "USA" },
"status": "closed",
"priority": "urgent",
"category": "Problem",
"sub_category_one": "Billing",
"sub_category_two": "Refund",
"group": "sales",
"assignee_email": "oliver@example.com",
"tags": ["refund", "urgent"],
"resolution_due_date": "2025-12-31T23:59:59Z"
}
headers = {
"X-Api-Key": "<x-api-key>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {'X-Api-Key': '<x-api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
email: 'john@example.com',
subject: 'How to resolve the pending payments',
description: 'I need your help in resolving the pending payments.',
ticket_fields: {Country: 'USA'},
status: 'closed',
priority: 'urgent',
category: 'Problem',
sub_category_one: 'Billing',
sub_category_two: 'Refund',
group: 'sales',
assignee_email: 'oliver@example.com',
tags: ['refund', 'urgent'],
resolution_due_date: '2025-12-31T23:59:59Z'
})
};
fetch('https://{your-subdomain}.neetodesk.com/api/external/v2/tickets/{ticket_id}', 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/{ticket_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'email' => 'john@example.com',
'subject' => 'How to resolve the pending payments',
'description' => 'I need your help in resolving the pending payments.',
'ticket_fields' => [
'Country' => 'USA'
],
'status' => 'closed',
'priority' => 'urgent',
'category' => 'Problem',
'sub_category_one' => 'Billing',
'sub_category_two' => 'Refund',
'group' => 'sales',
'assignee_email' => 'oliver@example.com',
'tags' => [
'refund',
'urgent'
],
'resolution_due_date' => '2025-12-31T23:59:59Z'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"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"
"strings"
"net/http"
"io"
)
func main() {
url := "https://{your-subdomain}.neetodesk.com/api/external/v2/tickets/{ticket_id}"
payload := strings.NewReader("{\n \"email\": \"john@example.com\",\n \"subject\": \"How to resolve the pending payments\",\n \"description\": \"I need your help in resolving the pending payments.\",\n \"ticket_fields\": {\n \"Country\": \"USA\"\n },\n \"status\": \"closed\",\n \"priority\": \"urgent\",\n \"category\": \"Problem\",\n \"sub_category_one\": \"Billing\",\n \"sub_category_two\": \"Refund\",\n \"group\": \"sales\",\n \"assignee_email\": \"oliver@example.com\",\n \"tags\": [\n \"refund\",\n \"urgent\"\n ],\n \"resolution_due_date\": \"2025-12-31T23:59:59Z\"\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("X-Api-Key", "<x-api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.put("https://{your-subdomain}.neetodesk.com/api/external/v2/tickets/{ticket_id}")
.header("X-Api-Key", "<x-api-key>")
.header("Content-Type", "application/json")
.body("{\n \"email\": \"john@example.com\",\n \"subject\": \"How to resolve the pending payments\",\n \"description\": \"I need your help in resolving the pending payments.\",\n \"ticket_fields\": {\n \"Country\": \"USA\"\n },\n \"status\": \"closed\",\n \"priority\": \"urgent\",\n \"category\": \"Problem\",\n \"sub_category_one\": \"Billing\",\n \"sub_category_two\": \"Refund\",\n \"group\": \"sales\",\n \"assignee_email\": \"oliver@example.com\",\n \"tags\": [\n \"refund\",\n \"urgent\"\n ],\n \"resolution_due_date\": \"2025-12-31T23:59:59Z\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://{your-subdomain}.neetodesk.com/api/external/v2/tickets/{ticket_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["X-Api-Key"] = '<x-api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"email\": \"john@example.com\",\n \"subject\": \"How to resolve the pending payments\",\n \"description\": \"I need your help in resolving the pending payments.\",\n \"ticket_fields\": {\n \"Country\": \"USA\"\n },\n \"status\": \"closed\",\n \"priority\": \"urgent\",\n \"category\": \"Problem\",\n \"sub_category_one\": \"Billing\",\n \"sub_category_two\": \"Refund\",\n \"group\": \"sales\",\n \"assignee_email\": \"oliver@example.com\",\n \"tags\": [\n \"refund\",\n \"urgent\"\n ],\n \"resolution_due_date\": \"2025-12-31T23:59:59Z\"\n}"
response = http.request(request)
puts response.read_body{
"ticket": {
"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",
"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"
}
]
}
}Update Ticket
Updates a ticket.
curl --request PUT \
--url https://{your-subdomain}.neetodesk.com/api/external/v2/tickets/{ticket_id} \
--header 'Content-Type: application/json' \
--header 'X-Api-Key: <x-api-key>' \
--data '
{
"email": "john@example.com",
"subject": "How to resolve the pending payments",
"description": "I need your help in resolving the pending payments.",
"ticket_fields": {
"Country": "USA"
},
"status": "closed",
"priority": "urgent",
"category": "Problem",
"sub_category_one": "Billing",
"sub_category_two": "Refund",
"group": "sales",
"assignee_email": "oliver@example.com",
"tags": [
"refund",
"urgent"
],
"resolution_due_date": "2025-12-31T23:59:59Z"
}
'import requests
url = "https://{your-subdomain}.neetodesk.com/api/external/v2/tickets/{ticket_id}"
payload = {
"email": "john@example.com",
"subject": "How to resolve the pending payments",
"description": "I need your help in resolving the pending payments.",
"ticket_fields": { "Country": "USA" },
"status": "closed",
"priority": "urgent",
"category": "Problem",
"sub_category_one": "Billing",
"sub_category_two": "Refund",
"group": "sales",
"assignee_email": "oliver@example.com",
"tags": ["refund", "urgent"],
"resolution_due_date": "2025-12-31T23:59:59Z"
}
headers = {
"X-Api-Key": "<x-api-key>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {'X-Api-Key': '<x-api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
email: 'john@example.com',
subject: 'How to resolve the pending payments',
description: 'I need your help in resolving the pending payments.',
ticket_fields: {Country: 'USA'},
status: 'closed',
priority: 'urgent',
category: 'Problem',
sub_category_one: 'Billing',
sub_category_two: 'Refund',
group: 'sales',
assignee_email: 'oliver@example.com',
tags: ['refund', 'urgent'],
resolution_due_date: '2025-12-31T23:59:59Z'
})
};
fetch('https://{your-subdomain}.neetodesk.com/api/external/v2/tickets/{ticket_id}', 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/{ticket_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'email' => 'john@example.com',
'subject' => 'How to resolve the pending payments',
'description' => 'I need your help in resolving the pending payments.',
'ticket_fields' => [
'Country' => 'USA'
],
'status' => 'closed',
'priority' => 'urgent',
'category' => 'Problem',
'sub_category_one' => 'Billing',
'sub_category_two' => 'Refund',
'group' => 'sales',
'assignee_email' => 'oliver@example.com',
'tags' => [
'refund',
'urgent'
],
'resolution_due_date' => '2025-12-31T23:59:59Z'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"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"
"strings"
"net/http"
"io"
)
func main() {
url := "https://{your-subdomain}.neetodesk.com/api/external/v2/tickets/{ticket_id}"
payload := strings.NewReader("{\n \"email\": \"john@example.com\",\n \"subject\": \"How to resolve the pending payments\",\n \"description\": \"I need your help in resolving the pending payments.\",\n \"ticket_fields\": {\n \"Country\": \"USA\"\n },\n \"status\": \"closed\",\n \"priority\": \"urgent\",\n \"category\": \"Problem\",\n \"sub_category_one\": \"Billing\",\n \"sub_category_two\": \"Refund\",\n \"group\": \"sales\",\n \"assignee_email\": \"oliver@example.com\",\n \"tags\": [\n \"refund\",\n \"urgent\"\n ],\n \"resolution_due_date\": \"2025-12-31T23:59:59Z\"\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("X-Api-Key", "<x-api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.put("https://{your-subdomain}.neetodesk.com/api/external/v2/tickets/{ticket_id}")
.header("X-Api-Key", "<x-api-key>")
.header("Content-Type", "application/json")
.body("{\n \"email\": \"john@example.com\",\n \"subject\": \"How to resolve the pending payments\",\n \"description\": \"I need your help in resolving the pending payments.\",\n \"ticket_fields\": {\n \"Country\": \"USA\"\n },\n \"status\": \"closed\",\n \"priority\": \"urgent\",\n \"category\": \"Problem\",\n \"sub_category_one\": \"Billing\",\n \"sub_category_two\": \"Refund\",\n \"group\": \"sales\",\n \"assignee_email\": \"oliver@example.com\",\n \"tags\": [\n \"refund\",\n \"urgent\"\n ],\n \"resolution_due_date\": \"2025-12-31T23:59:59Z\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://{your-subdomain}.neetodesk.com/api/external/v2/tickets/{ticket_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["X-Api-Key"] = '<x-api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"email\": \"john@example.com\",\n \"subject\": \"How to resolve the pending payments\",\n \"description\": \"I need your help in resolving the pending payments.\",\n \"ticket_fields\": {\n \"Country\": \"USA\"\n },\n \"status\": \"closed\",\n \"priority\": \"urgent\",\n \"category\": \"Problem\",\n \"sub_category_one\": \"Billing\",\n \"sub_category_two\": \"Refund\",\n \"group\": \"sales\",\n \"assignee_email\": \"oliver@example.com\",\n \"tags\": [\n \"refund\",\n \"urgent\"\n ],\n \"resolution_due_date\": \"2025-12-31T23:59:59Z\"\n}"
response = http.request(request)
puts response.read_body{
"ticket": {
"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",
"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"
}
]
}
}{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.
Path Parameters
ID of the ticket. You can use either the ticket ID (UUID) or ticket number (sequential number) interchangeably. Refer to Getting Ticket ID section for detailed instructions.
Body
Email address of the customer.
"john@example.com"
Subject for the ticket.
"How to resolve the pending payments"
Description for the ticket.
"I need your help in resolving the pending payments."
Custom ticket fields. Refer to the ticket fields article for more details.
{ "Country": "USA" }Status for the ticket. Default statuses include new, open, on_hold, waiting_on_customer, closed, spam, trash. Custom statuses are also supported.
"closed"
Priority for the ticket.
low, medium, high, urgent "urgent"
Category for the ticket. Default categories include None, Questions, Incident, Problem, Feature request, Refund. Custom categories are also supported.
"Problem"
Sub-category for the ticket.
"Billing"
Second-level sub-category for the ticket.
"Refund"
Name of an existing group.
"sales"
Email address belonging to a team member.
"oliver@example.com"
Tags to assign to the ticket.
["refund", "urgent"]Resolution due date for the ticket.
"2025-12-31T23:59:59Z"
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"
"Problem"
"Billing"
"Refund"
Name of the assigned group.
"Sales"
["refund", "urgent"]