List issues
curl --request GET \
--url https://productlane.com/api/v2/issues \
--header 'Authorization: Bearer <token>'import requests
url = "https://productlane.com/api/v2/issues"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://productlane.com/api/v2/issues', 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://productlane.com/api/v2/issues",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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://productlane.com/api/v2/issues"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://productlane.com/api/v2/issues")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://productlane.com/api/v2/issues")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": [
{
"id": "<string>",
"identifier": "<string>",
"title": "<string>",
"description": "<string>",
"priority": "<string>",
"status": "<string>",
"linear_team_id": "<string>",
"url": "<string>",
"project_id": "<string>",
"sort_order": 123,
"total_score": 123,
"is_visible": true,
"portal_instance_ids": [
"<string>"
],
"created_at": "<string>",
"updated_at": "<string>",
"linear_ticket_id": "<string>"
}
],
"page": {
"cursor": "<string>",
"has_more": true,
"limit": 123
}
}{
"message": "<string>",
"code": "<string>",
"issues": [
{
"message": "<string>"
}
]
}Issues
List issues
List roadmap issues in the workspace. Cursor-paginated. Requires the issues:read scope.
GET
/
issues
List issues
curl --request GET \
--url https://productlane.com/api/v2/issues \
--header 'Authorization: Bearer <token>'import requests
url = "https://productlane.com/api/v2/issues"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://productlane.com/api/v2/issues', 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://productlane.com/api/v2/issues",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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://productlane.com/api/v2/issues"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://productlane.com/api/v2/issues")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://productlane.com/api/v2/issues")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": [
{
"id": "<string>",
"identifier": "<string>",
"title": "<string>",
"description": "<string>",
"priority": "<string>",
"status": "<string>",
"linear_team_id": "<string>",
"url": "<string>",
"project_id": "<string>",
"sort_order": 123,
"total_score": 123,
"is_visible": true,
"portal_instance_ids": [
"<string>"
],
"created_at": "<string>",
"updated_at": "<string>",
"linear_ticket_id": "<string>"
}
],
"page": {
"cursor": "<string>",
"has_more": true,
"limit": 123
}
}{
"message": "<string>",
"code": "<string>",
"issues": [
{
"message": "<string>"
}
]
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Query Parameters
Required range:
1 <= x <= 200Lifecycle state (triage, backlog, unstarted, started, completed, canceled). Forwarded raw from Linear so custom workflows resolve to their real names.
Required string length:
1 - 64Required string length:
1 - 255Required string length:
1 - 128Filter to a single portal by its id (from GET /portal/instances). Pass __main__ for the Main (Root) portal. Omit to return items across all portals.
visible items show on their portals, hidden items were taken down, pending items were never reviewed.
Available options:
visible, hidden, pending created_at (newest first) or total_score (highest demand first). Both break ties by id.
Available options:
created_at, total_score