curl --request POST \
--url https://api.select.dev/v2/ticket-links \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'x-tenant-id: <x-tenant-id>' \
--data '
{
"srn": "<string>",
"integration_id": "<string>",
"ticket_id": "<string>"
}
'import requests
url = "https://api.select.dev/v2/ticket-links"
payload = {
"srn": "<string>",
"integration_id": "<string>",
"ticket_id": "<string>"
}
headers = {
"x-tenant-id": "<x-tenant-id>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'x-tenant-id': '<x-tenant-id>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({srn: '<string>', integration_id: '<string>', ticket_id: '<string>'})
};
fetch('https://api.select.dev/v2/ticket-links', 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.select.dev/v2/ticket-links",
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([
'srn' => '<string>',
'integration_id' => '<string>',
'ticket_id' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"x-tenant-id: <x-tenant-id>"
],
]);
$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.select.dev/v2/ticket-links"
payload := strings.NewReader("{\n \"srn\": \"<string>\",\n \"integration_id\": \"<string>\",\n \"ticket_id\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-tenant-id", "<x-tenant-id>")
req.Header.Add("Authorization", "Bearer <token>")
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.select.dev/v2/ticket-links")
.header("x-tenant-id", "<x-tenant-id>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"srn\": \"<string>\",\n \"integration_id\": \"<string>\",\n \"ticket_id\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.select.dev/v2/ticket-links")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-tenant-id"] = '<x-tenant-id>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"srn\": \"<string>\",\n \"integration_id\": \"<string>\",\n \"ticket_id\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"etag": "<string>",
"srn": "<string>",
"provider": "jira",
"integration_id": "<string>",
"ticket_id": "<string>",
"ticket_url": "<string>",
"create_time": "<string>",
"ticket_key": "<string>",
"ticket_title": "<string>",
"ticket_status": "<string>",
"ticket_assignee": "<string>",
"is_disconnected": false,
"sync_time": "<string>"
}{
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"retryable": true,
"type": "about:blank",
"details": [
{}
]
}{
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"retryable": true,
"type": "about:blank",
"details": [
{}
]
}{
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"retryable": true,
"type": "about:blank",
"details": [
{}
]
}{
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"retryable": true,
"type": "about:blank",
"details": [
{}
]
}{
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"retryable": true,
"type": "about:blank",
"details": [
{}
]
}{
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"retryable": true,
"type": "about:blank",
"details": [
{}
]
}{
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"retryable": true,
"type": "about:blank",
"details": [
{}
]
}{
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"retryable": true,
"type": "about:blank",
"details": [
{}
]
}{
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"retryable": true,
"type": "about:blank",
"details": [
{}
]
}{
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"retryable": true,
"type": "about:blank",
"details": [
{}
]
}{
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"retryable": true,
"type": "about:blank",
"details": [
{}
]
}Link a ticket to a resource
curl --request POST \
--url https://api.select.dev/v2/ticket-links \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'x-tenant-id: <x-tenant-id>' \
--data '
{
"srn": "<string>",
"integration_id": "<string>",
"ticket_id": "<string>"
}
'import requests
url = "https://api.select.dev/v2/ticket-links"
payload = {
"srn": "<string>",
"integration_id": "<string>",
"ticket_id": "<string>"
}
headers = {
"x-tenant-id": "<x-tenant-id>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'x-tenant-id': '<x-tenant-id>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({srn: '<string>', integration_id: '<string>', ticket_id: '<string>'})
};
fetch('https://api.select.dev/v2/ticket-links', 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.select.dev/v2/ticket-links",
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([
'srn' => '<string>',
'integration_id' => '<string>',
'ticket_id' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"x-tenant-id: <x-tenant-id>"
],
]);
$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.select.dev/v2/ticket-links"
payload := strings.NewReader("{\n \"srn\": \"<string>\",\n \"integration_id\": \"<string>\",\n \"ticket_id\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-tenant-id", "<x-tenant-id>")
req.Header.Add("Authorization", "Bearer <token>")
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.select.dev/v2/ticket-links")
.header("x-tenant-id", "<x-tenant-id>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"srn\": \"<string>\",\n \"integration_id\": \"<string>\",\n \"ticket_id\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.select.dev/v2/ticket-links")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-tenant-id"] = '<x-tenant-id>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"srn\": \"<string>\",\n \"integration_id\": \"<string>\",\n \"ticket_id\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"etag": "<string>",
"srn": "<string>",
"provider": "jira",
"integration_id": "<string>",
"ticket_id": "<string>",
"ticket_url": "<string>",
"create_time": "<string>",
"ticket_key": "<string>",
"ticket_title": "<string>",
"ticket_status": "<string>",
"ticket_assignee": "<string>",
"is_disconnected": false,
"sync_time": "<string>"
}{
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"retryable": true,
"type": "about:blank",
"details": [
{}
]
}{
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"retryable": true,
"type": "about:blank",
"details": [
{}
]
}{
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"retryable": true,
"type": "about:blank",
"details": [
{}
]
}{
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"retryable": true,
"type": "about:blank",
"details": [
{}
]
}{
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"retryable": true,
"type": "about:blank",
"details": [
{}
]
}{
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"retryable": true,
"type": "about:blank",
"details": [
{}
]
}{
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"retryable": true,
"type": "about:blank",
"details": [
{}
]
}{
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"retryable": true,
"type": "about:blank",
"details": [
{}
]
}{
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"retryable": true,
"type": "about:blank",
"details": [
{}
]
}{
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"retryable": true,
"type": "about:blank",
"details": [
{}
]
}{
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"retryable": true,
"type": "about:blank",
"details": [
{}
]
}Authorizations
Organization API key (sl_…).
Headers
The organization ID the request is scoped to.
Body
Link an issue that already exists in the ticketing system to a resource.
The canonical SELECT Resource Name (SRN) of the resource the issue is linked to. Resolve one from a resource's identifying details with POST /v2/srn/actions/resolve.
1 - 2048Identifier of the ticketing integration the issue belongs to.
The issue to link, given either as its key (ENG-123) or as its identifier in the ticketing system.
Response
Successful Response
An issue in an external ticketing system, linked to a SELECT resource.
The unique identifier of the link.
Opaque strong ETag for this link. Matches the ETag response header, and changes whenever the mirrored title, status or assignee is refreshed.
The canonical SELECT Resource Name (SRN) of the resource the issue is linked to. Resolve one from a resource's identifying details with POST /v2/srn/actions/resolve.
The ticketing system the issue lives in.
"jira"Identifier of the ticketing integration the issue belongs to.
The issue's identifier in the ticketing system.
Link to the issue in the ticketing system.
When the link was created, as an RFC 3339 UTC timestamp.
The issue's human-readable key, such as ENG-123.
The issue's summary line.
The issue's status in the ticketing system, such as In Progress.
Display name of the person the issue is assigned to.
Whether the issue no longer exists in the ticketing system. A disconnected link stays listed so the loss is visible, and its title, status and assignee stay as they were at the last successful read.
When the issue's title, status and assignee were last read from the ticketing system, as an RFC 3339 UTC timestamp. Those fields reflect the issue as of this time, not necessarily its current state.

