Get Submission
curl --request GET \
--url https://api.xenia.team/api/v1/ops/workspaces/{workspaceId}/logs/{logId} \
--header 'x-client-key: <api-key>' \
--header 'x-client-secret: <api-key>'import requests
url = "https://api.xenia.team/api/v1/ops/workspaces/{workspaceId}/logs/{logId}"
headers = {
"x-client-key": "<api-key>",
"x-client-secret": "<api-key>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {'x-client-key': '<api-key>', 'x-client-secret': '<api-key>'}
};
fetch('https://api.xenia.team/api/v1/ops/workspaces/{workspaceId}/logs/{logId}', 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.xenia.team/api/v1/ops/workspaces/{workspaceId}/logs/{logId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-client-key: <api-key>",
"x-client-secret: <api-key>"
],
]);
$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.xenia.team/api/v1/ops/workspaces/{workspaceId}/logs/{logId}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-client-key", "<api-key>")
req.Header.Add("x-client-secret", "<api-key>")
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.xenia.team/api/v1/ops/workspaces/{workspaceId}/logs/{logId}")
.header("x-client-key", "<api-key>")
.header("x-client-secret", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.xenia.team/api/v1/ops/workspaces/{workspaceId}/logs/{logId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-client-key"] = '<api-key>'
request["x-client-secret"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": {
"id": "b3f1c2a4-5d6e-4f70-8a91-2c3d4e5f6a7b",
"ChecklistId": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
"name": "Opening Checklist",
"status": "submitted",
"progress": 100,
"score": 96,
"submitterName": "John Doe",
"submitterEmail": "john.doe@example.com",
"lastItemUpdatedAt": "2026-01-15T14:32:00.000Z",
"TaskChecklistItems": [
{
"id": "item-uuid",
"ChecklistItemId": "tmpl-item-uuid",
"type": "passFail",
"answers": [
"pass"
],
"score": 1,
"attachments": []
}
]
},
"meta": {}
}{
"status": false,
"code": 401,
"error": {
"message": "Invalid client credentials"
}
}{
"status": false,
"code": 403,
"error": {
"message": "Forbidden: API key not authorized for this route"
}
}Reporting
Get Submission
Returns one submission (checklist log) by id: its status, progress, score, submitter, answered items, and attachments. Requires the key’s user to have access to the submission’s workspace (the caller must be a member of that workspace). Use the submission-records endpoint to find submission ids.
GET
/
api
/
v1
/
ops
/
workspaces
/
{workspaceId}
/
logs
/
{logId}
Get Submission
curl --request GET \
--url https://api.xenia.team/api/v1/ops/workspaces/{workspaceId}/logs/{logId} \
--header 'x-client-key: <api-key>' \
--header 'x-client-secret: <api-key>'import requests
url = "https://api.xenia.team/api/v1/ops/workspaces/{workspaceId}/logs/{logId}"
headers = {
"x-client-key": "<api-key>",
"x-client-secret": "<api-key>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {'x-client-key': '<api-key>', 'x-client-secret': '<api-key>'}
};
fetch('https://api.xenia.team/api/v1/ops/workspaces/{workspaceId}/logs/{logId}', 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.xenia.team/api/v1/ops/workspaces/{workspaceId}/logs/{logId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-client-key: <api-key>",
"x-client-secret: <api-key>"
],
]);
$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.xenia.team/api/v1/ops/workspaces/{workspaceId}/logs/{logId}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-client-key", "<api-key>")
req.Header.Add("x-client-secret", "<api-key>")
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.xenia.team/api/v1/ops/workspaces/{workspaceId}/logs/{logId}")
.header("x-client-key", "<api-key>")
.header("x-client-secret", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.xenia.team/api/v1/ops/workspaces/{workspaceId}/logs/{logId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-client-key"] = '<api-key>'
request["x-client-secret"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": {
"id": "b3f1c2a4-5d6e-4f70-8a91-2c3d4e5f6a7b",
"ChecklistId": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
"name": "Opening Checklist",
"status": "submitted",
"progress": 100,
"score": 96,
"submitterName": "John Doe",
"submitterEmail": "john.doe@example.com",
"lastItemUpdatedAt": "2026-01-15T14:32:00.000Z",
"TaskChecklistItems": [
{
"id": "item-uuid",
"ChecklistItemId": "tmpl-item-uuid",
"type": "passFail",
"answers": [
"pass"
],
"score": 1,
"attachments": []
}
]
},
"meta": {}
}{
"status": false,
"code": 401,
"error": {
"message": "Invalid client credentials"
}
}{
"status": false,
"code": 403,
"error": {
"message": "Forbidden: API key not authorized for this route"
}
}Fetch a single submission by id — its status, progress, score, submitter, answered items, and attachments. Use Get Submission Records to discover submission ids, then read individual submissions here. The key’s user must belong to the submission’s workspace.
Path Parameters
Workspace the submission belongs to.
The submission (checklist log) id.
Query Parameters
all returns every item; filtered applies the template's conditional-visibility rules.
Available options:
all, filtered Group items by their template sections.
Available options:
true, false Include report-only data such as flag categories and AI summaries.
Available options:
true, false Include item comments.
Available options:
true, false Include approval workflow state.
Available options:
true, false