curl --request POST \
--url https://api.leen.dev/v1/itsm/tickets \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <api-key>' \
--header 'X-CONNECTION-ID: <api-key>' \
--data '
{
"name": "<string>",
"assigned_user_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"assigned_user_vendor_id": "<string>",
"comments": "<string>",
"description": "<string>",
"identifier": "<string>",
"parent_ticket_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"parent_ticket_vendor_id": "<string>",
"priority": "<string>",
"project_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"project_vendor_id": "<string>",
"resolution_notes": "<string>",
"resolution_reason": "<string>",
"status": "<string>",
"status_change_reason": "<string>",
"type": "<string>",
"type_id": "<string>",
"type_vendor_id": "<string>",
"work_notes": "<string>"
}
'import requests
url = "https://api.leen.dev/v1/itsm/tickets"
payload = {
"name": "<string>",
"assigned_user_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"assigned_user_vendor_id": "<string>",
"comments": "<string>",
"description": "<string>",
"identifier": "<string>",
"parent_ticket_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"parent_ticket_vendor_id": "<string>",
"priority": "<string>",
"project_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"project_vendor_id": "<string>",
"resolution_notes": "<string>",
"resolution_reason": "<string>",
"status": "<string>",
"status_change_reason": "<string>",
"type": "<string>",
"type_id": "<string>",
"type_vendor_id": "<string>",
"work_notes": "<string>"
}
headers = {
"X-API-KEY": "<api-key>",
"X-CONNECTION-ID": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'X-API-KEY': '<api-key>',
'X-CONNECTION-ID': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
name: '<string>',
assigned_user_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
assigned_user_vendor_id: '<string>',
comments: '<string>',
description: '<string>',
identifier: '<string>',
parent_ticket_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
parent_ticket_vendor_id: '<string>',
priority: '<string>',
project_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
project_vendor_id: '<string>',
resolution_notes: '<string>',
resolution_reason: '<string>',
status: '<string>',
status_change_reason: '<string>',
type: '<string>',
type_id: '<string>',
type_vendor_id: '<string>',
work_notes: '<string>'
})
};
fetch('https://api.leen.dev/v1/itsm/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://api.leen.dev/v1/itsm/tickets",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'name' => '<string>',
'assigned_user_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'assigned_user_vendor_id' => '<string>',
'comments' => '<string>',
'description' => '<string>',
'identifier' => '<string>',
'parent_ticket_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'parent_ticket_vendor_id' => '<string>',
'priority' => '<string>',
'project_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'project_vendor_id' => '<string>',
'resolution_notes' => '<string>',
'resolution_reason' => '<string>',
'status' => '<string>',
'status_change_reason' => '<string>',
'type' => '<string>',
'type_id' => '<string>',
'type_vendor_id' => '<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"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"assigned_user_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"assigned_user_vendor_id\": \"<string>\",\n \"comments\": \"<string>\",\n \"description\": \"<string>\",\n \"identifier\": \"<string>\",\n \"parent_ticket_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"parent_ticket_vendor_id\": \"<string>\",\n \"priority\": \"<string>\",\n \"project_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"project_vendor_id\": \"<string>\",\n \"resolution_notes\": \"<string>\",\n \"resolution_reason\": \"<string>\",\n \"status\": \"<string>\",\n \"status_change_reason\": \"<string>\",\n \"type\": \"<string>\",\n \"type_id\": \"<string>\",\n \"type_vendor_id\": \"<string>\",\n \"work_notes\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", 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.post("https://api.leen.dev/v1/itsm/tickets")
.header("X-API-KEY", "<api-key>")
.header("X-CONNECTION-ID", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"assigned_user_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"assigned_user_vendor_id\": \"<string>\",\n \"comments\": \"<string>\",\n \"description\": \"<string>\",\n \"identifier\": \"<string>\",\n \"parent_ticket_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"parent_ticket_vendor_id\": \"<string>\",\n \"priority\": \"<string>\",\n \"project_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"project_vendor_id\": \"<string>\",\n \"resolution_notes\": \"<string>\",\n \"resolution_reason\": \"<string>\",\n \"status\": \"<string>\",\n \"status_change_reason\": \"<string>\",\n \"type\": \"<string>\",\n \"type_id\": \"<string>\",\n \"type_vendor_id\": \"<string>\",\n \"work_notes\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.leen.dev/v1/itsm/tickets")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-KEY"] = '<api-key>'
request["X-CONNECTION-ID"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"assigned_user_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"assigned_user_vendor_id\": \"<string>\",\n \"comments\": \"<string>\",\n \"description\": \"<string>\",\n \"identifier\": \"<string>\",\n \"parent_ticket_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"parent_ticket_vendor_id\": \"<string>\",\n \"priority\": \"<string>\",\n \"project_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"project_vendor_id\": \"<string>\",\n \"resolution_notes\": \"<string>\",\n \"resolution_reason\": \"<string>\",\n \"status\": \"<string>\",\n \"status_change_reason\": \"<string>\",\n \"type\": \"<string>\",\n \"type_id\": \"<string>\",\n \"type_vendor_id\": \"<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",
"assigned_user_vendor_id": "<string>",
"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",
"parent_ticket_vendor_id": "<string>",
"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>",
"type_vendor_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>"
}Create ITSM Ticket
Create a new ITSM ticket.
Vendor ID fields (project_vendor_id, assigned_user_vendor_id, parent_ticket_vendor_id) are passed straight through to the vendor without extra DB resolution. The ticket is always persisted locally and the full DB record is returned.
curl --request POST \
--url https://api.leen.dev/v1/itsm/tickets \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <api-key>' \
--header 'X-CONNECTION-ID: <api-key>' \
--data '
{
"name": "<string>",
"assigned_user_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"assigned_user_vendor_id": "<string>",
"comments": "<string>",
"description": "<string>",
"identifier": "<string>",
"parent_ticket_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"parent_ticket_vendor_id": "<string>",
"priority": "<string>",
"project_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"project_vendor_id": "<string>",
"resolution_notes": "<string>",
"resolution_reason": "<string>",
"status": "<string>",
"status_change_reason": "<string>",
"type": "<string>",
"type_id": "<string>",
"type_vendor_id": "<string>",
"work_notes": "<string>"
}
'import requests
url = "https://api.leen.dev/v1/itsm/tickets"
payload = {
"name": "<string>",
"assigned_user_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"assigned_user_vendor_id": "<string>",
"comments": "<string>",
"description": "<string>",
"identifier": "<string>",
"parent_ticket_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"parent_ticket_vendor_id": "<string>",
"priority": "<string>",
"project_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"project_vendor_id": "<string>",
"resolution_notes": "<string>",
"resolution_reason": "<string>",
"status": "<string>",
"status_change_reason": "<string>",
"type": "<string>",
"type_id": "<string>",
"type_vendor_id": "<string>",
"work_notes": "<string>"
}
headers = {
"X-API-KEY": "<api-key>",
"X-CONNECTION-ID": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'X-API-KEY': '<api-key>',
'X-CONNECTION-ID': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
name: '<string>',
assigned_user_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
assigned_user_vendor_id: '<string>',
comments: '<string>',
description: '<string>',
identifier: '<string>',
parent_ticket_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
parent_ticket_vendor_id: '<string>',
priority: '<string>',
project_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
project_vendor_id: '<string>',
resolution_notes: '<string>',
resolution_reason: '<string>',
status: '<string>',
status_change_reason: '<string>',
type: '<string>',
type_id: '<string>',
type_vendor_id: '<string>',
work_notes: '<string>'
})
};
fetch('https://api.leen.dev/v1/itsm/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://api.leen.dev/v1/itsm/tickets",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'name' => '<string>',
'assigned_user_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'assigned_user_vendor_id' => '<string>',
'comments' => '<string>',
'description' => '<string>',
'identifier' => '<string>',
'parent_ticket_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'parent_ticket_vendor_id' => '<string>',
'priority' => '<string>',
'project_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'project_vendor_id' => '<string>',
'resolution_notes' => '<string>',
'resolution_reason' => '<string>',
'status' => '<string>',
'status_change_reason' => '<string>',
'type' => '<string>',
'type_id' => '<string>',
'type_vendor_id' => '<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"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"assigned_user_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"assigned_user_vendor_id\": \"<string>\",\n \"comments\": \"<string>\",\n \"description\": \"<string>\",\n \"identifier\": \"<string>\",\n \"parent_ticket_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"parent_ticket_vendor_id\": \"<string>\",\n \"priority\": \"<string>\",\n \"project_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"project_vendor_id\": \"<string>\",\n \"resolution_notes\": \"<string>\",\n \"resolution_reason\": \"<string>\",\n \"status\": \"<string>\",\n \"status_change_reason\": \"<string>\",\n \"type\": \"<string>\",\n \"type_id\": \"<string>\",\n \"type_vendor_id\": \"<string>\",\n \"work_notes\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", 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.post("https://api.leen.dev/v1/itsm/tickets")
.header("X-API-KEY", "<api-key>")
.header("X-CONNECTION-ID", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"assigned_user_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"assigned_user_vendor_id\": \"<string>\",\n \"comments\": \"<string>\",\n \"description\": \"<string>\",\n \"identifier\": \"<string>\",\n \"parent_ticket_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"parent_ticket_vendor_id\": \"<string>\",\n \"priority\": \"<string>\",\n \"project_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"project_vendor_id\": \"<string>\",\n \"resolution_notes\": \"<string>\",\n \"resolution_reason\": \"<string>\",\n \"status\": \"<string>\",\n \"status_change_reason\": \"<string>\",\n \"type\": \"<string>\",\n \"type_id\": \"<string>\",\n \"type_vendor_id\": \"<string>\",\n \"work_notes\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.leen.dev/v1/itsm/tickets")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-KEY"] = '<api-key>'
request["X-CONNECTION-ID"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"assigned_user_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"assigned_user_vendor_id\": \"<string>\",\n \"comments\": \"<string>\",\n \"description\": \"<string>\",\n \"identifier\": \"<string>\",\n \"parent_ticket_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"parent_ticket_vendor_id\": \"<string>\",\n \"priority\": \"<string>\",\n \"project_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"project_vendor_id\": \"<string>\",\n \"resolution_notes\": \"<string>\",\n \"resolution_reason\": \"<string>\",\n \"status\": \"<string>\",\n \"status_change_reason\": \"<string>\",\n \"type\": \"<string>\",\n \"type_id\": \"<string>\",\n \"type_vendor_id\": \"<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",
"assigned_user_vendor_id": "<string>",
"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",
"parent_ticket_vendor_id": "<string>",
"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>",
"type_vendor_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>"
}Body
Name/Title of the Ticket
Leen user UUID. Either assigned_user_id or assigned_user_vendor_id can be provided.
Vendor's user identifier (e.g., Jira accountId). Alternative to assigned_user_id.
Public-facing comments visible to end users. ServiceNow: maps to 'comments'. Ignored for Jira.
Description of the Ticket
User-provided tracking identifier (auto-generated from project-type-hash if not provided)
Parent Ticket ID (for sub-tasks)
Vendor's ticket identifier (e.g., Jira issue key 'PROJ-123'). Alternative to parent_ticket_id.
Priority of the Ticket
Leen project UUID. Required for vendors that use projects (e.g. Jira). Omit for vendors without projects (e.g. ServiceNow — table is derived from ticket type).
Vendor's project identifier (e.g., Jira project key 'PROJ'). Alternative to project_id. Omit for vendors without projects.
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. Note: Jira does not support setting status at creation time — tickets are always created with the workflow's default status. Use the update endpoint to change status after creation.
Reason for a status change (e.g. reason for putting on hold). ServiceNow: maps to 'hold_reason'. Ignored for Jira.
Type of the Ticket (e.g., Task, Bug, Story)
Deprecated: use type_vendor_id instead. Vendor issue type ID.
Vendor issue type ID (e.g., Jira issue type ID). Alternative to type — at least one must be provided. Preferred over type when both are given.
Internal work notes visible only to agents. ServiceNow: maps to 'work_notes'. Ignored for Jira.
Response
Successful Response
Response model for ticket creation. Extends ScopedITSMTicketRespModel with vendor ID fields that are echoed back when vendor IDs were provided in the request (rather than Leen UUIDs).
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
Vendor account ID of the assigned user (e.g. Jira accountId). Populated when the request used assigned_user_vendor_id.
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)
Vendor key of the parent ticket (e.g. 'PROJ-42'). Populated when the request used parent_ticket_vendor_id.
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)
Vendor issue type ID (e.g. '10034'). Populated when the request used type_vendor_id.
URL of the Ticket