curl --request POST \
--url https://scribe.skeptrune.com/api/threads/{id}/resolve \
--cookie scribe_session=import requests
url = "https://scribe.skeptrune.com/api/threads/{id}/resolve"
headers = {"cookie": "scribe_session="}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {cookie: 'scribe_session='}};
fetch('https://scribe.skeptrune.com/api/threads/{id}/resolve', 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://scribe.skeptrune.com/api/threads/{id}/resolve",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_COOKIE => "scribe_session=",
]);
$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://scribe.skeptrune.com/api/threads/{id}/resolve"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("cookie", "scribe_session=")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://scribe.skeptrune.com/api/threads/{id}/resolve")
.header("cookie", "scribe_session=")
.asString();require 'uri'
require 'net/http'
url = URI("https://scribe.skeptrune.com/api/threads/{id}/resolve")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["cookie"] = 'scribe_session='
response = http.request(request)
puts response.read_body{
"id": "thr_5aBcDeFgHiJkLmNoPq6r",
"docId": "doc_S9tUvWxYzAbCdEfGh12i",
"kind": "comment",
"anchorJson": "{\"from\":{\"type\":\"relative\",\"item\":10},\"to\":{\"type\":\"relative\",\"item\":24}}",
"quotedText": "ship in Q2",
"proposedText": null,
"sid": null,
"status": "open",
"createdBy": "usr_V1StGXR8_Z5jdHi6BmyT",
"createdByName": "Ada Lovelace",
"createdByKind": "human",
"createdAt": 1752624000000,
"updatedAt": 1752624000000,
"resolvedBy": null,
"resolvedAt": null
}{
"error": {
"code": "not_found",
"message": "No such document."
}
}{
"error": {
"code": "not_found",
"message": "No such document."
}
}{
"error": {
"code": "not_found",
"message": "No such document."
}
}{
"error": {
"code": "not_found",
"message": "No such document."
}
}Resolve a thread
Marks an open thread as resolved. Requires comment access on the document; API keys with edit OR comment access resolve as their agent identity (read-only keys are rejected).
curl --request POST \
--url https://scribe.skeptrune.com/api/threads/{id}/resolve \
--cookie scribe_session=import requests
url = "https://scribe.skeptrune.com/api/threads/{id}/resolve"
headers = {"cookie": "scribe_session="}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {cookie: 'scribe_session='}};
fetch('https://scribe.skeptrune.com/api/threads/{id}/resolve', 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://scribe.skeptrune.com/api/threads/{id}/resolve",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_COOKIE => "scribe_session=",
]);
$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://scribe.skeptrune.com/api/threads/{id}/resolve"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("cookie", "scribe_session=")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://scribe.skeptrune.com/api/threads/{id}/resolve")
.header("cookie", "scribe_session=")
.asString();require 'uri'
require 'net/http'
url = URI("https://scribe.skeptrune.com/api/threads/{id}/resolve")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["cookie"] = 'scribe_session='
response = http.request(request)
puts response.read_body{
"id": "thr_5aBcDeFgHiJkLmNoPq6r",
"docId": "doc_S9tUvWxYzAbCdEfGh12i",
"kind": "comment",
"anchorJson": "{\"from\":{\"type\":\"relative\",\"item\":10},\"to\":{\"type\":\"relative\",\"item\":24}}",
"quotedText": "ship in Q2",
"proposedText": null,
"sid": null,
"status": "open",
"createdBy": "usr_V1StGXR8_Z5jdHi6BmyT",
"createdByName": "Ada Lovelace",
"createdByKind": "human",
"createdAt": 1752624000000,
"updatedAt": 1752624000000,
"resolvedBy": null,
"resolvedAt": null
}{
"error": {
"code": "not_found",
"message": "No such document."
}
}{
"error": {
"code": "not_found",
"message": "No such document."
}
}{
"error": {
"code": "not_found",
"message": "No such document."
}
}{
"error": {
"code": "not_found",
"message": "No such document."
}
}Authorizations
Browser session cookie set by the WorkOS sign-in flow.
Path Parameters
Id of the thread to resolve.
Response
The resolved thread.
A comment or suggestion thread anchored to a document range.
Thread id.
"thr_5aBcDeFgHiJkLmNoPq6r"
Document the thread is anchored to.
"doc_S9tUvWxYzAbCdEfGh12i"
Kind of discussion thread.
comment, suggestion "comment"
Serialized Yjs relative positions ({from,to}) anchoring the thread.
"{\"from\":{\"type\":\"relative\",\"item\":10},\"to\":{\"type\":\"relative\",\"item\":24}}"
Text that was selected when the thread was created.
"ship in Q2"
Replacement text (legacy API-created replacement suggestions only). Accepting such a thread splices this text over the anchored range. Null for comments and suggesting-mode suggestions.
"ship in Q3"
Suggesting-mode suggestion id (editor tracked changes only): identifies the suggestion_insert/suggestion_delete mark burst in the collaborative document. Accepting/rejecting such a thread resolves those marks. Null for comments and legacy replacement suggestions.
null
Current lifecycle status of the thread.
open, resolved, accepted, rejected "open"
User id of the thread creator.
"usr_V1StGXR8_Z5jdHi6BmyT"
Display name of the thread creator — the creator's name or handle (agent creators carry the name of their API key). Null when the creator row no longer exists.
"Ada Lovelace"
Whether the thread creator is a person ('human') or an API-key agent identity ('agent'). Null when the creator row no longer exists.
human, agent, null "human"
When the thread was started (epoch milliseconds).
1752624000000
When the thread last changed (epoch milliseconds).
1752624000000
User id who resolved/accepted/rejected the thread, or null.
"usr_V1StGXR8_Z5jdHi6BmyT"
When the thread left the open state, or null.
1752624000000