curl --request GET \
--url https://api.leen.dev/v1/itsm/tickets \
--header 'X-API-KEY: <api-key>' \
--header 'X-CONNECTION-ID: <api-key>'import requests
url = "https://api.leen.dev/v1/itsm/tickets"
headers = {
"X-API-KEY": "<api-key>",
"X-CONNECTION-ID": "<api-key>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {'X-API-KEY': '<api-key>', 'X-CONNECTION-ID': '<api-key>'}
};
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 => "GET",
CURLOPT_HTTPHEADER => [
"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"
"net/http"
"io"
)
func main() {
url := "https://api.leen.dev/v1/itsm/tickets"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-KEY", "<api-key>")
req.Header.Add("X-CONNECTION-ID", "<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://api.leen.dev/v1/itsm/tickets")
.header("X-API-KEY", "<api-key>")
.header("X-CONNECTION-ID", "<api-key>")
.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::Get.new(url)
request["X-API-KEY"] = '<api-key>'
request["X-CONNECTION-ID"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"items": [
{
"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>"
}
],
"next_cursor": "<string>",
"previous_cursor": "<string>"
}{
"code": "<string>",
"detail": [
{}
],
"message": "<string>",
"type": "<string>"
}List ITSM Tickets
List tickets from the connected ITSM tool, normalised across vendors.
curl --request GET \
--url https://api.leen.dev/v1/itsm/tickets \
--header 'X-API-KEY: <api-key>' \
--header 'X-CONNECTION-ID: <api-key>'import requests
url = "https://api.leen.dev/v1/itsm/tickets"
headers = {
"X-API-KEY": "<api-key>",
"X-CONNECTION-ID": "<api-key>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {'X-API-KEY': '<api-key>', 'X-CONNECTION-ID': '<api-key>'}
};
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 => "GET",
CURLOPT_HTTPHEADER => [
"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"
"net/http"
"io"
)
func main() {
url := "https://api.leen.dev/v1/itsm/tickets"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-KEY", "<api-key>")
req.Header.Add("X-CONNECTION-ID", "<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://api.leen.dev/v1/itsm/tickets")
.header("X-API-KEY", "<api-key>")
.header("X-CONNECTION-ID", "<api-key>")
.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::Get.new(url)
request["X-API-KEY"] = '<api-key>'
request["X-CONNECTION-ID"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"items": [
{
"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>"
}
],
"next_cursor": "<string>",
"previous_cursor": "<string>"
}{
"code": "<string>",
"detail": [
{}
],
"message": "<string>",
"type": "<string>"
}Query Parameters
Filter tickets updated since a specific time
Filter tickets by project ID
Filter tickets by assigned user ID
Filter tickets by created by user ID
Filter tickets by priority
Filter tickets by status
Filter tickets by type
Filter active tickets
Filter tickets by identifier (exact match)
Filter tickets by tags (comma-separated, AND match — tickets must contain all specified tags)
Filter to JIRA standard (non-subtask) issue types only. JIRA connections only.
Exclude tickets of these types (comma-separated, e.g., 'Epic,Sub-task')
Sort field and direction (e.g., 'created_at:desc', 'updated_at:asc'). Supported: updated_at, status_updated_at, ticket_created_at (or created_at as alias)
Only records whose updated_at is at or after this time. Leen bumps updated_at whenever any field on a record changes, so this is the filter for an incremental sync: it returns records that are new and records that changed, and nothing that has stood still. Example: 2021-01-01T00:00:00+00:00.
"2021-01-01T00:00:00+00:00"
Opaque position of the next page, taken from the previous response. Ignore its contents; it encodes where the walk had reached.
How many records to return per page. The walk is the same either way; a larger page means fewer round trips and more memory per response.
1 <= x <= 500Response
Successful Response
The records on this page.
Show child attributes
Show child attributes
Opaque position of the next page. Pass it back as cursor to continue; null when this is the last page.
Opaque position of the previous page, for walking backwards. Null on the first page.