curl --request GET \
--url https://api.modem.dev/v1/topics/{topicId} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.modem.dev/v1/topics/{topicId}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.modem.dev/v1/topics/{topicId}', 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.modem.dev/v1/topics/{topicId}",
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://api.modem.dev/v1/topics/{topicId}"
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://api.modem.dev/v1/topics/{topicId}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.modem.dev/v1/topics/{topicId}")
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{
"archivedByUserId": "<string>",
"archivedReason": "<string>",
"eventCount": 123,
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"issueType": "bug_report",
"keywords": [
"<string>"
],
"lifecycleState": "completed",
"lifecycleStateConfidence": 0.5,
"priority": "default",
"priorityReasoning": "<string>",
"summary": "<string>",
"title": "<string>",
"archivedAt": "2023-11-07T05:31:56Z",
"createdAt": "2023-11-07T05:31:56Z",
"graphStatus": "active",
"successorTopic": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"title": "<string>"
},
"supersededAt": "2023-11-07T05:31:56Z",
"timeRangeEnd": "<unknown>",
"timeRangeStart": "<unknown>",
"updatedAt": "2023-11-07T05:31:56Z"
}{
"code": "NOT_FOUND",
"defined": true,
"message": "<string>",
"status": 404,
"data": "<unknown>"
}{
"code": "NOT_FOUND",
"defined": true,
"message": "<string>",
"status": 404,
"data": "<unknown>"
}{
"code": "NOT_FOUND",
"defined": true,
"message": "<string>",
"status": 404,
"data": "<unknown>"
}{
"code": "NOT_FOUND",
"defined": true,
"message": "<string>",
"status": 404,
"data": "<unknown>"
}{
"code": "NOT_FOUND",
"defined": true,
"message": "<string>",
"status": 404,
"data": "<unknown>"
}{
"code": "NOT_FOUND",
"defined": true,
"message": "<string>",
"status": 404,
"data": "<unknown>"
}Get topic
Get a topic by ID
curl --request GET \
--url https://api.modem.dev/v1/topics/{topicId} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.modem.dev/v1/topics/{topicId}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.modem.dev/v1/topics/{topicId}', 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.modem.dev/v1/topics/{topicId}",
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://api.modem.dev/v1/topics/{topicId}"
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://api.modem.dev/v1/topics/{topicId}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.modem.dev/v1/topics/{topicId}")
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{
"archivedByUserId": "<string>",
"archivedReason": "<string>",
"eventCount": 123,
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"issueType": "bug_report",
"keywords": [
"<string>"
],
"lifecycleState": "completed",
"lifecycleStateConfidence": 0.5,
"priority": "default",
"priorityReasoning": "<string>",
"summary": "<string>",
"title": "<string>",
"archivedAt": "2023-11-07T05:31:56Z",
"createdAt": "2023-11-07T05:31:56Z",
"graphStatus": "active",
"successorTopic": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"title": "<string>"
},
"supersededAt": "2023-11-07T05:31:56Z",
"timeRangeEnd": "<unknown>",
"timeRangeStart": "<unknown>",
"updatedAt": "2023-11-07T05:31:56Z"
}{
"code": "NOT_FOUND",
"defined": true,
"message": "<string>",
"status": 404,
"data": "<unknown>"
}{
"code": "NOT_FOUND",
"defined": true,
"message": "<string>",
"status": 404,
"data": "<unknown>"
}{
"code": "NOT_FOUND",
"defined": true,
"message": "<string>",
"status": 404,
"data": "<unknown>"
}{
"code": "NOT_FOUND",
"defined": true,
"message": "<string>",
"status": 404,
"data": "<unknown>"
}{
"code": "NOT_FOUND",
"defined": true,
"message": "<string>",
"status": 404,
"data": "<unknown>"
}{
"code": "NOT_FOUND",
"defined": true,
"message": "<string>",
"status": 404,
"data": "<unknown>"
}Authorizations
Organization API key (modem_…).
Path Parameters
Response
OK
Detailed topic fields including archived status.
User who archived the topic.
Optional reason for archiving.
4000Number of events grouped under this topic.
Classification for the topic as a type of issue.
bug_report, complaint, discussion, feature_request, praise Keywords associated with the topic.
LLM-assessed lifecycle state for a topic.
completed, dismissed, in_progress, open, unknown Confidence for the most recent lifecycle assessment.
0 <= x <= 1Priority level: very_low, low, default, high, or very_high
default, high, low, very_high, very_low Reasoning from the most recent automatic topic-priority scoring decision. Null when priority was manually overridden or never auto-scored.
Descriptive summary of the topic.
Short human-readable title of the topic.
Timestamp when the topic was archived.
Graph-structural lifecycle: active (live), superseded (system-dissolved, terminal), archived (user-dismissed, retains members).
active, archived, superseded The topic that replaced a superseded v2 topic, when one can be resolved.
Show child attributes
Show child attributes
Timestamp when a v2 topic was superseded; null unless graphStatus is superseded.
Timestamp when the topic was last updated.
Was this page helpful?