curl --request GET \
--url https://api.protodesk.io/v1/ai/runs/{runId}/results/{kind} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.protodesk.io/v1/ai/runs/{runId}/results/{kind}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.protodesk.io/v1/ai/runs/{runId}/results/{kind}', 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.protodesk.io/v1/ai/runs/{runId}/results/{kind}",
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.protodesk.io/v1/ai/runs/{runId}/results/{kind}"
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.protodesk.io/v1/ai/runs/{runId}/results/{kind}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.protodesk.io/v1/ai/runs/{runId}/results/{kind}")
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": {
"artifactId": "<string>",
"runId": "<string>",
"conversationId": "<string>",
"sourceMessageId": "<string>",
"body": "<string>",
"text": "<string>",
"changed": true,
"mode": "<string>",
"targetLanguage": "<string>",
"outputLanguage": "<string>",
"reviewLanguage": "<string>",
"sourceLanguage": "<string>",
"sourceDraftArtifactId": "<string>",
"sourceDraftContentHash": "<string>",
"sourceDraftHash": "<string>",
"contextArtifactId": "<string>",
"strategy": "<string>",
"strategyLabel": "<string>",
"grounding": {
"state": "grounded",
"reason": "<string>",
"confidence": 123
},
"citations": [
{}
],
"claims": [
{}
],
"evidenceSources": [
{}
],
"verdict": "<string>",
"shouldDraft": true,
"reasonCode": "<string>",
"reason": "<string>",
"overrideApplied": true,
"knowledgeOutdated": true,
"createdAt": "2023-11-07T05:31:56Z",
"expiresAt": "2023-11-07T05:31:56Z"
}
}{
"error": {
"code": "route.not_found",
"message": "Not found",
"requestId": "req_x6q5vl75f5d53m7oet2k4r5w6a"
}
}Get run result
Requires ai:use and conversations:read on a connection owned by a current workspace owner/admin. API keys created before human ownership was recorded must be replaced in Settings. OAuth works through MCP; REST uses API keys. Run results are private to the originating connection; another client or a new OAuth grant cannot read them. A missing, redacted, expired, or unfinished result returns 404. Reply suggestion can finish without a draft; inspect reply-guard.
curl --request GET \
--url https://api.protodesk.io/v1/ai/runs/{runId}/results/{kind} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.protodesk.io/v1/ai/runs/{runId}/results/{kind}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.protodesk.io/v1/ai/runs/{runId}/results/{kind}', 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.protodesk.io/v1/ai/runs/{runId}/results/{kind}",
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.protodesk.io/v1/ai/runs/{runId}/results/{kind}"
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.protodesk.io/v1/ai/runs/{runId}/results/{kind}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.protodesk.io/v1/ai/runs/{runId}/results/{kind}")
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": {
"artifactId": "<string>",
"runId": "<string>",
"conversationId": "<string>",
"sourceMessageId": "<string>",
"body": "<string>",
"text": "<string>",
"changed": true,
"mode": "<string>",
"targetLanguage": "<string>",
"outputLanguage": "<string>",
"reviewLanguage": "<string>",
"sourceLanguage": "<string>",
"sourceDraftArtifactId": "<string>",
"sourceDraftContentHash": "<string>",
"sourceDraftHash": "<string>",
"contextArtifactId": "<string>",
"strategy": "<string>",
"strategyLabel": "<string>",
"grounding": {
"state": "grounded",
"reason": "<string>",
"confidence": 123
},
"citations": [
{}
],
"claims": [
{}
],
"evidenceSources": [
{}
],
"verdict": "<string>",
"shouldDraft": true,
"reasonCode": "<string>",
"reason": "<string>",
"overrideApplied": true,
"knowledgeOutdated": true,
"createdAt": "2023-11-07T05:31:56Z",
"expiresAt": "2023-11-07T05:31:56Z"
}
}{
"error": {
"code": "route.not_found",
"message": "Not found",
"requestId": "req_x6q5vl75f5d53m7oet2k4r5w6a"
}
}Authorizations
Use a workspace API key in the Authorization header: Bearer pk_.... Older pk_live_ and pk_test_ keys remain valid; their prefixes do not isolate data or select a separate environment.
Path Parameters
reply-draft, follow-up-draft, rewrite, draft-grounding-review, draft-review-translation, reply-guard Response
Authorized result.
Typed artifact projection for the requested kind. Reply and follow-up drafts expose body; rewrites expose text. Fact reviews expose verdict, claims and evidenceSources. Review translations expose body and reviewLanguage. Reply guard exposes shouldDraft, reasonCode and reason. Results never imply delivery.
Show child attributes
Show child attributes
