Submission Counts by Status
curl --request POST \
--url https://api.xenia.team/api/v1/ops/submissions-count-by-status \
--header 'Content-Type: application/json' \
--header 'x-client-key: <api-key>' \
--header 'x-client-secret: <api-key>' \
--data '
{
"fromDate": "2025-06-01T00:00:00.000Z",
"toDate": "2025-06-30T23:59:59.999Z",
"checklists": [],
"locations": [],
"users": []
}
'import requests
url = "https://api.xenia.team/api/v1/ops/submissions-count-by-status"
payload = {
"fromDate": "2025-06-01T00:00:00.000Z",
"toDate": "2025-06-30T23:59:59.999Z",
"checklists": [],
"locations": [],
"users": []
}
headers = {
"x-client-key": "<api-key>",
"x-client-secret": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'x-client-key': '<api-key>',
'x-client-secret': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
fromDate: '2025-06-01T00:00:00.000Z',
toDate: '2025-06-30T23:59:59.999Z',
checklists: [],
locations: [],
users: []
})
};
fetch('https://api.xenia.team/api/v1/ops/submissions-count-by-status', 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/submissions-count-by-status",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'fromDate' => '2025-06-01T00:00:00.000Z',
'toDate' => '2025-06-30T23:59:59.999Z',
'checklists' => [
],
'locations' => [
],
'users' => [
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"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"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.xenia.team/api/v1/ops/submissions-count-by-status"
payload := strings.NewReader("{\n \"fromDate\": \"2025-06-01T00:00:00.000Z\",\n \"toDate\": \"2025-06-30T23:59:59.999Z\",\n \"checklists\": [],\n \"locations\": [],\n \"users\": []\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-client-key", "<api-key>")
req.Header.Add("x-client-secret", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.xenia.team/api/v1/ops/submissions-count-by-status")
.header("x-client-key", "<api-key>")
.header("x-client-secret", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"fromDate\": \"2025-06-01T00:00:00.000Z\",\n \"toDate\": \"2025-06-30T23:59:59.999Z\",\n \"checklists\": [],\n \"locations\": [],\n \"users\": []\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.xenia.team/api/v1/ops/submissions-count-by-status")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-client-key"] = '<api-key>'
request["x-client-secret"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"fromDate\": \"2025-06-01T00:00:00.000Z\",\n \"toDate\": \"2025-06-30T23:59:59.999Z\",\n \"checklists\": [],\n \"locations\": [],\n \"users\": []\n}"
response = http.request(request)
puts response.read_body{
"data": {
"Submitted": {
"count": 120
},
"In Progress": {
"count": 14
},
"Pending Approval": {
"count": 8
},
"total": 142
},
"meta": {}
}Reporting
Submission Counts by Status
Returns the number of submissions per status for the workspace. All body fields are optional; omitting them counts every non-draft submission. Results are scoped to the key user’s authorized locations; this endpoint has no CAN_VIEW_REPORTING gate.
POST
/
api
/
v1
/
ops
/
submissions-count-by-status
Submission Counts by Status
curl --request POST \
--url https://api.xenia.team/api/v1/ops/submissions-count-by-status \
--header 'Content-Type: application/json' \
--header 'x-client-key: <api-key>' \
--header 'x-client-secret: <api-key>' \
--data '
{
"fromDate": "2025-06-01T00:00:00.000Z",
"toDate": "2025-06-30T23:59:59.999Z",
"checklists": [],
"locations": [],
"users": []
}
'import requests
url = "https://api.xenia.team/api/v1/ops/submissions-count-by-status"
payload = {
"fromDate": "2025-06-01T00:00:00.000Z",
"toDate": "2025-06-30T23:59:59.999Z",
"checklists": [],
"locations": [],
"users": []
}
headers = {
"x-client-key": "<api-key>",
"x-client-secret": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'x-client-key': '<api-key>',
'x-client-secret': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
fromDate: '2025-06-01T00:00:00.000Z',
toDate: '2025-06-30T23:59:59.999Z',
checklists: [],
locations: [],
users: []
})
};
fetch('https://api.xenia.team/api/v1/ops/submissions-count-by-status', 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/submissions-count-by-status",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'fromDate' => '2025-06-01T00:00:00.000Z',
'toDate' => '2025-06-30T23:59:59.999Z',
'checklists' => [
],
'locations' => [
],
'users' => [
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"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"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.xenia.team/api/v1/ops/submissions-count-by-status"
payload := strings.NewReader("{\n \"fromDate\": \"2025-06-01T00:00:00.000Z\",\n \"toDate\": \"2025-06-30T23:59:59.999Z\",\n \"checklists\": [],\n \"locations\": [],\n \"users\": []\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-client-key", "<api-key>")
req.Header.Add("x-client-secret", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.xenia.team/api/v1/ops/submissions-count-by-status")
.header("x-client-key", "<api-key>")
.header("x-client-secret", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"fromDate\": \"2025-06-01T00:00:00.000Z\",\n \"toDate\": \"2025-06-30T23:59:59.999Z\",\n \"checklists\": [],\n \"locations\": [],\n \"users\": []\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.xenia.team/api/v1/ops/submissions-count-by-status")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-client-key"] = '<api-key>'
request["x-client-secret"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"fromDate\": \"2025-06-01T00:00:00.000Z\",\n \"toDate\": \"2025-06-30T23:59:59.999Z\",\n \"checklists\": [],\n \"locations\": [],\n \"users\": []\n}"
response = http.request(request)
puts response.read_body{
"data": {
"Submitted": {
"count": 120
},
"In Progress": {
"count": 14
},
"Pending Approval": {
"count": 8
},
"total": 142
},
"meta": {}
}Returns the number of submissions per status for the workspace, using the same optional filters as Submission Records. Each status key maps to an object with a
count, and the top-level total is a plain number. Results are scoped to the key user’s authorized locations; this endpoint has no CAN_VIEW_REPORTING gate.Body
application/json
Start of the submission date range (filters on lastItemUpdatedAt). Requires toDate.
End of the submission date range. Requires fromDate.
Template (ChecklistId) UUIDs to include.
Location UUIDs to include.
User UUIDs (creator, updater, or last item updater).
Free-text match against the template name and submitter/updater name.
Response
Submission counts retrieved successfully. Each status key maps to an object with a count; the top-level total is a plain number.