Create issue
curl --request POST \
--url https://productlane.com/api/v2/issues \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"title": "<string>",
"team_id": "<string>",
"state_id": "<string>",
"priority": 0,
"description": "<string>",
"project_id": "<string>",
"assignee_id": "<string>",
"label_ids": [
"<string>"
],
"is_visible": true
}
'import requests
url = "https://productlane.com/api/v2/issues"
payload = {
"title": "<string>",
"team_id": "<string>",
"state_id": "<string>",
"priority": 0,
"description": "<string>",
"project_id": "<string>",
"assignee_id": "<string>",
"label_ids": ["<string>"],
"is_visible": True
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
title: '<string>',
team_id: '<string>',
state_id: '<string>',
priority: 0,
description: '<string>',
project_id: '<string>',
assignee_id: '<string>',
label_ids: ['<string>'],
is_visible: true
})
};
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 => "POST",
CURLOPT_POSTFIELDS => json_encode([
'title' => '<string>',
'team_id' => '<string>',
'state_id' => '<string>',
'priority' => 0,
'description' => '<string>',
'project_id' => '<string>',
'assignee_id' => '<string>',
'label_ids' => [
'<string>'
],
'is_visible' => true
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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://productlane.com/api/v2/issues"
payload := strings.NewReader("{\n \"title\": \"<string>\",\n \"team_id\": \"<string>\",\n \"state_id\": \"<string>\",\n \"priority\": 0,\n \"description\": \"<string>\",\n \"project_id\": \"<string>\",\n \"assignee_id\": \"<string>\",\n \"label_ids\": [\n \"<string>\"\n ],\n \"is_visible\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
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://productlane.com/api/v2/issues")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"title\": \"<string>\",\n \"team_id\": \"<string>\",\n \"state_id\": \"<string>\",\n \"priority\": 0,\n \"description\": \"<string>\",\n \"project_id\": \"<string>\",\n \"assignee_id\": \"<string>\",\n \"label_ids\": [\n \"<string>\"\n ],\n \"is_visible\": true\n}")
.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::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"title\": \"<string>\",\n \"team_id\": \"<string>\",\n \"state_id\": \"<string>\",\n \"priority\": 0,\n \"description\": \"<string>\",\n \"project_id\": \"<string>\",\n \"assignee_id\": \"<string>\",\n \"label_ids\": [\n \"<string>\"\n ],\n \"is_visible\": true\n}"
response = http.request(request)
puts response.read_body{
"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,
"created_at": "<string>",
"updated_at": "<string>",
"linear_ticket_id": "<string>"
}{
"message": "<string>",
"code": "<string>",
"issues": [
{
"message": "<string>"
}
]
}Issues
Create issue
Create an issue, filed in Linear first and mirrored to Productlane. Requires Linear to be connected and the issues:write scope.
POST
/
issues
Create issue
curl --request POST \
--url https://productlane.com/api/v2/issues \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"title": "<string>",
"team_id": "<string>",
"state_id": "<string>",
"priority": 0,
"description": "<string>",
"project_id": "<string>",
"assignee_id": "<string>",
"label_ids": [
"<string>"
],
"is_visible": true
}
'import requests
url = "https://productlane.com/api/v2/issues"
payload = {
"title": "<string>",
"team_id": "<string>",
"state_id": "<string>",
"priority": 0,
"description": "<string>",
"project_id": "<string>",
"assignee_id": "<string>",
"label_ids": ["<string>"],
"is_visible": True
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
title: '<string>',
team_id: '<string>',
state_id: '<string>',
priority: 0,
description: '<string>',
project_id: '<string>',
assignee_id: '<string>',
label_ids: ['<string>'],
is_visible: true
})
};
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 => "POST",
CURLOPT_POSTFIELDS => json_encode([
'title' => '<string>',
'team_id' => '<string>',
'state_id' => '<string>',
'priority' => 0,
'description' => '<string>',
'project_id' => '<string>',
'assignee_id' => '<string>',
'label_ids' => [
'<string>'
],
'is_visible' => true
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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://productlane.com/api/v2/issues"
payload := strings.NewReader("{\n \"title\": \"<string>\",\n \"team_id\": \"<string>\",\n \"state_id\": \"<string>\",\n \"priority\": 0,\n \"description\": \"<string>\",\n \"project_id\": \"<string>\",\n \"assignee_id\": \"<string>\",\n \"label_ids\": [\n \"<string>\"\n ],\n \"is_visible\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
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://productlane.com/api/v2/issues")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"title\": \"<string>\",\n \"team_id\": \"<string>\",\n \"state_id\": \"<string>\",\n \"priority\": 0,\n \"description\": \"<string>\",\n \"project_id\": \"<string>\",\n \"assignee_id\": \"<string>\",\n \"label_ids\": [\n \"<string>\"\n ],\n \"is_visible\": true\n}")
.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::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"title\": \"<string>\",\n \"team_id\": \"<string>\",\n \"state_id\": \"<string>\",\n \"priority\": 0,\n \"description\": \"<string>\",\n \"project_id\": \"<string>\",\n \"assignee_id\": \"<string>\",\n \"label_ids\": [\n \"<string>\"\n ],\n \"is_visible\": true\n}"
response = http.request(request)
puts response.read_body{
"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,
"created_at": "<string>",
"updated_at": "<string>",
"linear_ticket_id": "<string>"
}{
"message": "<string>",
"code": "<string>",
"issues": [
{
"message": "<string>"
}
]
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
application/json
Minimum string length:
1Linear team id. Fetch from GET /me under linear_team_ids.
Minimum string length:
1Linear workflow state id. Fetch from GET /issues/workflow-states?team_id=....
Minimum string length:
1priority
Option 1 · enum<number>Option 2 · enum<number>Option 3 · enum<number>Option 4 · enum<number>Option 5 · enum<number>
required
Linear issue priority. 0 = No priority, 1 = Urgent, 2 = High, 3 = Normal, 4 = Low.
Available options:
0 Linear project id to attach the issue to.
Linear user id of the assignee.
Linear label ids to attach.
Whether the issue is shown on the customer portal. Defaults to hidden.
Response
Successful response
⌘I