curl --request PATCH \
--url https://api.leen.dev/v1/itsm/tickets/{ticket_id} \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <api-key>' \
--header 'X-CONNECTION-ID: <api-key>' \
--data '
{
"assigned_user_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"comments": "<string>",
"description": "<string>",
"name": "<string>",
"priority": "<string>",
"resolution_notes": "<string>",
"resolution_reason": "<string>",
"status": "<string>",
"status_change_reason": "<string>",
"work_notes": "<string>"
}
'import requests
url = "https://api.leen.dev/v1/itsm/tickets/{ticket_id}"
payload = {
"assigned_user_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"comments": "<string>",
"description": "<string>",
"name": "<string>",
"priority": "<string>",
"resolution_notes": "<string>",
"resolution_reason": "<string>",
"status": "<string>",
"status_change_reason": "<string>",
"work_notes": "<string>"
}
headers = {
"X-API-KEY": "<api-key>",
"X-CONNECTION-ID": "<api-key>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {
'X-API-KEY': '<api-key>',
'X-CONNECTION-ID': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
assigned_user_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
comments: '<string>',
description: '<string>',
name: '<string>',
priority: '<string>',
resolution_notes: '<string>',
resolution_reason: '<string>',
status: '<string>',
status_change_reason: '<string>',
work_notes: '<string>'
})
};
fetch('https://api.leen.dev/v1/itsm/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://api.leen.dev/v1/itsm/tickets/{ticket_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'assigned_user_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'comments' => '<string>',
'description' => '<string>',
'name' => '<string>',
'priority' => '<string>',
'resolution_notes' => '<string>',
'resolution_reason' => '<string>',
'status' => '<string>',
'status_change_reason' => '<string>',
'work_notes' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-KEY: <api-key>",
"X-CONNECTION-ID: <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://api.leen.dev/v1/itsm/tickets/{ticket_id}"
payload := strings.NewReader("{\n \"assigned_user_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"comments\": \"<string>\",\n \"description\": \"<string>\",\n \"name\": \"<string>\",\n \"priority\": \"<string>\",\n \"resolution_notes\": \"<string>\",\n \"resolution_reason\": \"<string>\",\n \"status\": \"<string>\",\n \"status_change_reason\": \"<string>\",\n \"work_notes\": \"<string>\"\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("X-API-KEY", "<api-key>")
req.Header.Add("X-CONNECTION-ID", "<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.patch("https://api.leen.dev/v1/itsm/tickets/{ticket_id}")
.header("X-API-KEY", "<api-key>")
.header("X-CONNECTION-ID", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"assigned_user_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"comments\": \"<string>\",\n \"description\": \"<string>\",\n \"name\": \"<string>\",\n \"priority\": \"<string>\",\n \"resolution_notes\": \"<string>\",\n \"resolution_reason\": \"<string>\",\n \"status\": \"<string>\",\n \"status_change_reason\": \"<string>\",\n \"work_notes\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.leen.dev/v1/itsm/tickets/{ticket_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["X-API-KEY"] = '<api-key>'
request["X-CONNECTION-ID"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"assigned_user_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"comments\": \"<string>\",\n \"description\": \"<string>\",\n \"name\": \"<string>\",\n \"priority\": \"<string>\",\n \"resolution_notes\": \"<string>\",\n \"resolution_reason\": \"<string>\",\n \"status\": \"<string>\",\n \"status_change_reason\": \"<string>\",\n \"work_notes\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"status": "<string>",
"vendor_attributes": {
"id": "<string>",
"vendor": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"data": {
"customFields": {},
"id": "<string>",
"statusCategory": "<string>",
"vendor": "JIRA"
},
"priority": "<string>",
"status": "<string>",
"type": "<string>",
"type_id": "<string>",
"updated_at": "2023-11-07T05:31:56Z"
},
"active": true,
"assigned_user_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"closed_at": "2023-11-07T05:31:56Z",
"created_by_user_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"description": "<string>",
"due_date": "2023-11-07T05:31:56Z",
"identifier": "<string>",
"parent_ticket_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"priority": "<string>",
"project_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status_updated_at": "2023-11-07T05:31:56Z",
"tags": [
"<string>"
],
"ticket_created_at": "2023-11-07T05:31:56Z",
"type": "<string>",
"type_id": "<string>",
"url": "<string>"
}{
"code": "<string>",
"detail": [
{}
],
"message": "<string>",
"type": "<string>"
}{
"code": "<string>",
"detail": [
{}
],
"message": "<string>",
"type": "<string>"
}{
"code": "<string>",
"detail": [
{}
],
"message": "<string>",
"type": "<string>"
}{
"code": "<string>",
"detail": [
{}
],
"message": "<string>",
"type": "<string>"
}Update ITSM Ticket by ID
Update an ITSM ticket.
This endpoint follows a vendor-first pattern:
- Updates the ticket in the vendor system (e.g., JIRA)
- If vendor update succeeds, updates the local database
- Returns the updated ticket
Updatable fields:
- status: Ticket status (normalized to Leen values)
- priority: Ticket priority (normalized to Leen values)
- assigned_user_id: UUID of the assigned user
- name: Ticket title/summary
- description: Ticket description
Note: All fields are optional. Only provided fields will be updated.
curl --request PATCH \
--url https://api.leen.dev/v1/itsm/tickets/{ticket_id} \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <api-key>' \
--header 'X-CONNECTION-ID: <api-key>' \
--data '
{
"assigned_user_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"comments": "<string>",
"description": "<string>",
"name": "<string>",
"priority": "<string>",
"resolution_notes": "<string>",
"resolution_reason": "<string>",
"status": "<string>",
"status_change_reason": "<string>",
"work_notes": "<string>"
}
'import requests
url = "https://api.leen.dev/v1/itsm/tickets/{ticket_id}"
payload = {
"assigned_user_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"comments": "<string>",
"description": "<string>",
"name": "<string>",
"priority": "<string>",
"resolution_notes": "<string>",
"resolution_reason": "<string>",
"status": "<string>",
"status_change_reason": "<string>",
"work_notes": "<string>"
}
headers = {
"X-API-KEY": "<api-key>",
"X-CONNECTION-ID": "<api-key>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {
'X-API-KEY': '<api-key>',
'X-CONNECTION-ID': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
assigned_user_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
comments: '<string>',
description: '<string>',
name: '<string>',
priority: '<string>',
resolution_notes: '<string>',
resolution_reason: '<string>',
status: '<string>',
status_change_reason: '<string>',
work_notes: '<string>'
})
};
fetch('https://api.leen.dev/v1/itsm/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://api.leen.dev/v1/itsm/tickets/{ticket_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'assigned_user_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'comments' => '<string>',
'description' => '<string>',
'name' => '<string>',
'priority' => '<string>',
'resolution_notes' => '<string>',
'resolution_reason' => '<string>',
'status' => '<string>',
'status_change_reason' => '<string>',
'work_notes' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-KEY: <api-key>",
"X-CONNECTION-ID: <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://api.leen.dev/v1/itsm/tickets/{ticket_id}"
payload := strings.NewReader("{\n \"assigned_user_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"comments\": \"<string>\",\n \"description\": \"<string>\",\n \"name\": \"<string>\",\n \"priority\": \"<string>\",\n \"resolution_notes\": \"<string>\",\n \"resolution_reason\": \"<string>\",\n \"status\": \"<string>\",\n \"status_change_reason\": \"<string>\",\n \"work_notes\": \"<string>\"\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("X-API-KEY", "<api-key>")
req.Header.Add("X-CONNECTION-ID", "<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.patch("https://api.leen.dev/v1/itsm/tickets/{ticket_id}")
.header("X-API-KEY", "<api-key>")
.header("X-CONNECTION-ID", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"assigned_user_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"comments\": \"<string>\",\n \"description\": \"<string>\",\n \"name\": \"<string>\",\n \"priority\": \"<string>\",\n \"resolution_notes\": \"<string>\",\n \"resolution_reason\": \"<string>\",\n \"status\": \"<string>\",\n \"status_change_reason\": \"<string>\",\n \"work_notes\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.leen.dev/v1/itsm/tickets/{ticket_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["X-API-KEY"] = '<api-key>'
request["X-CONNECTION-ID"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"assigned_user_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"comments\": \"<string>\",\n \"description\": \"<string>\",\n \"name\": \"<string>\",\n \"priority\": \"<string>\",\n \"resolution_notes\": \"<string>\",\n \"resolution_reason\": \"<string>\",\n \"status\": \"<string>\",\n \"status_change_reason\": \"<string>\",\n \"work_notes\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"status": "<string>",
"vendor_attributes": {
"id": "<string>",
"vendor": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"data": {
"customFields": {},
"id": "<string>",
"statusCategory": "<string>",
"vendor": "JIRA"
},
"priority": "<string>",
"status": "<string>",
"type": "<string>",
"type_id": "<string>",
"updated_at": "2023-11-07T05:31:56Z"
},
"active": true,
"assigned_user_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"closed_at": "2023-11-07T05:31:56Z",
"created_by_user_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"description": "<string>",
"due_date": "2023-11-07T05:31:56Z",
"identifier": "<string>",
"parent_ticket_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"priority": "<string>",
"project_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status_updated_at": "2023-11-07T05:31:56Z",
"tags": [
"<string>"
],
"ticket_created_at": "2023-11-07T05:31:56Z",
"type": "<string>",
"type_id": "<string>",
"url": "<string>"
}{
"code": "<string>",
"detail": [
{}
],
"message": "<string>",
"type": "<string>"
}{
"code": "<string>",
"detail": [
{}
],
"message": "<string>",
"type": "<string>"
}{
"code": "<string>",
"detail": [
{}
],
"message": "<string>",
"type": "<string>"
}{
"code": "<string>",
"detail": [
{}
],
"message": "<string>",
"type": "<string>"
}Path Parameters
Body
User ID assigned to the Ticket
Public-facing comments visible to end users. ServiceNow: maps to 'comments'. Ignored for Jira.
Description of the Ticket
Name/Title of the Ticket
Priority of the Ticket
Detailed explanation of resolution. ServiceNow: maps to 'close_notes'. Ignored for Jira.
Category/reason for resolution. ServiceNow: maps to 'close_code'. Ignored for Jira.
Status of the Ticket
Reason for a status change (e.g. reason for putting on hold). ServiceNow: maps to 'hold_reason'. Ignored for Jira.
Internal work notes visible only to agents. ServiceNow: maps to 'work_notes'. Ignored for Jira.
Response
Successful Response
Leen's UUID for the Ticket
Name of the Ticket
Status of the Ticket
Vendor-specific attributes of the Ticket
Show child attributes
Show child attributes
Whether the Ticket is active
User ID assigned to the Ticket
Closing time of the Ticket
User ID who created the Ticket
Description of the Ticket
Due date of the Ticket
User-provided tracking identifier for the Ticket
Parent Ticket ID (for sub-tasks)
Priority of the Ticket
Project ID the Ticket belongs to
Last status update time
Tags associated with the Ticket
Creation time of the Ticket in the vendor system
Type of the Ticket (e.g., Epic, Story, Task, Bug)
Vendor-specific type ID (e.g., Jira issue type ID)
URL of the Ticket