curl --request GET \
--url https://productlane.com/api/v2/docs/articles/{id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://productlane.com/api/v2/docs/articles/{id}"
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/docs/articles/{id}', 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/docs/articles/{id}",
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/docs/articles/{id}"
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/docs/articles/{id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://productlane.com/api/v2/docs/articles/{id}")
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{
"id": "<string>",
"created_at": "<string>",
"updated_at": "<string>",
"title": "<string>",
"summary": "<string>",
"content": "<string>",
"icon": "<string>",
"url_name": "<string>",
"published": true,
"visibility": "public",
"visibility_tier": "public",
"kind": "doc",
"external_url": "<string>",
"archived": true,
"show_on_home_page": true,
"image_url": "<string>",
"group_id": "<string>",
"parent_article_id": "<string>",
"order": 123,
"portal_instance_id": "<string>"
}{
"message": "<string>",
"code": "<string>",
"issues": [
{
"message": "<string>"
}
]
}Get docs article
Fetch a help-center article by id. Requires the docs:read scope.
curl --request GET \
--url https://productlane.com/api/v2/docs/articles/{id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://productlane.com/api/v2/docs/articles/{id}"
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/docs/articles/{id}', 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/docs/articles/{id}",
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/docs/articles/{id}"
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/docs/articles/{id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://productlane.com/api/v2/docs/articles/{id}")
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{
"id": "<string>",
"created_at": "<string>",
"updated_at": "<string>",
"title": "<string>",
"summary": "<string>",
"content": "<string>",
"icon": "<string>",
"url_name": "<string>",
"published": true,
"visibility": "public",
"visibility_tier": "public",
"kind": "doc",
"external_url": "<string>",
"archived": true,
"show_on_home_page": true,
"image_url": "<string>",
"group_id": "<string>",
"parent_article_id": "<string>",
"order": 123,
"portal_instance_id": "<string>"
}{
"message": "<string>",
"code": "<string>",
"issues": [
{
"message": "<string>"
}
]
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
Query Parameters
BCP-47 language code. Returns the translation merged onto the response. Requires the Pro plan and the language enabled in workspace settings.
Response
Successful response
Name of a Nucleo icon (PascalCase, e.g. Notepad, Atom). Must be a valid icon from https://nucleoapp.com - unknown names will not render in the dashboard or portal.
Whether the article is on your docs site. Deprecated: read visibility_tier for the agent and internal split.
public, unlisted agent and internal articles both stay off your docs site and out of portal search. The Productlane Agent answers customers from an agent article, and never links it. An internal article is read by the AI Assistant alone.
public, agent, internal link rows point at a page you host elsewhere: content is empty and external_url holds the address.
doc, link Position among its siblings, ascending. Sort by it to match the order the docs site renders.