curl --request POST \
--url https://pria.praxislxp.com/api/user/tools \
--header 'Content-Type: application/json' \
--header 'x-access-token: <api-key>' \
--data '
{
"minimum": true
}
'import requests
url = "https://pria.praxislxp.com/api/user/tools"
payload = { "minimum": True }
headers = {
"x-access-token": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-access-token': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({minimum: true})
};
fetch('https://pria.praxislxp.com/api/user/tools', 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://pria.praxislxp.com/api/user/tools",
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([
'minimum' => true
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-access-token: <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://pria.praxislxp.com/api/user/tools"
payload := strings.NewReader("{\n \"minimum\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-access-token", "<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://pria.praxislxp.com/api/user/tools")
.header("x-access-token", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"minimum\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://pria.praxislxp.com/api/user/tools")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-access-token"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"minimum\": true\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"data": [
{
"_id": "6631915765bb0a94cfd6ca99",
"name": "call_google_calendar",
"status": "active",
"description": "Access Google Calendar to manage events",
"rtEnabled": true,
"rtOnly": false,
"unavailable": false,
"unavailableReason": ""
},
{
"_id": "6631915765bb0a94cfd6ca9a",
"name": "call_google_drive",
"status": "active",
"description": "Access Google Drive files",
"rtEnabled": false,
"rtOnly": false,
"unavailable": true,
"unavailableReason": "Google Cloud not enabled for users"
},
{
"_id": "6631915765bb0a94cfd6ca9b",
"name": "call_web_search",
"status": "active",
"description": "Search the web",
"rtEnabled": false,
"rtOnly": false
}
]
}Get available tools for the authenticated user
Retrieves the list of active tools available for the current user. Returns minimal tool information needed for Pria requests, including availability status for Google-integrated tools based on the user’s institution settings and Google Cloud configuration.
Results are sorted in ascending alphabetical order by tool name.
For Google-integrated tools (gmail, drive, calendar, sheets, docs, slides, meet, maps, classroom), the response includes unavailable and unavailableReason fields. Availability is determined by checking whether Google OAuth is configured, whether the institution has enabled Google Cloud for users, and whether an institution-level Google account is connected. Non-Google tools do not include these fields.
For a personal account (a user with no Digital Twin) every row also says whether the account can have the tool (personalAvailable), whether it is on now (enabled), whether the recommended set has it on (defaultOn) and, for a Google or Microsoft tool, whether the account connected that service (connected). The response carries personal with the five presets. The list itself is saved with toolsEnabled on PUT /api/user/me.
curl --request POST \
--url https://pria.praxislxp.com/api/user/tools \
--header 'Content-Type: application/json' \
--header 'x-access-token: <api-key>' \
--data '
{
"minimum": true
}
'import requests
url = "https://pria.praxislxp.com/api/user/tools"
payload = { "minimum": True }
headers = {
"x-access-token": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-access-token': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({minimum: true})
};
fetch('https://pria.praxislxp.com/api/user/tools', 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://pria.praxislxp.com/api/user/tools",
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([
'minimum' => true
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-access-token: <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://pria.praxislxp.com/api/user/tools"
payload := strings.NewReader("{\n \"minimum\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-access-token", "<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://pria.praxislxp.com/api/user/tools")
.header("x-access-token", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"minimum\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://pria.praxislxp.com/api/user/tools")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-access-token"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"minimum\": true\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"data": [
{
"_id": "6631915765bb0a94cfd6ca99",
"name": "call_google_calendar",
"status": "active",
"description": "Access Google Calendar to manage events",
"rtEnabled": true,
"rtOnly": false,
"unavailable": false,
"unavailableReason": ""
},
{
"_id": "6631915765bb0a94cfd6ca9a",
"name": "call_google_drive",
"status": "active",
"description": "Access Google Drive files",
"rtEnabled": false,
"rtOnly": false,
"unavailable": true,
"unavailableReason": "Google Cloud not enabled for users"
},
{
"_id": "6631915765bb0a94cfd6ca9b",
"name": "call_web_search",
"status": "active",
"description": "Search the web",
"rtEnabled": false,
"rtOnly": false
}
]
}Authorizations
JWT token passed in x-access-token header
Body
When true, omits the instructions field from each tool in the response. Useful for selector UIs that only need the identifier + short description.
true
Response
Tools retrieved successfully
Whether the operation was successful
true
List of tools sorted in ascending order by name
Show child attributes
Show child attributes
Personal accounts only (absent for a member of a Digital Twin, whose administrator sets the tools). The five presets, the one this account is on, and whether Tools Guidance is on. To apply a preset, send its list as toolsEnabled to PUT /api/user/me.
Show child attributes
Show child attributes
Present only when no tools are found, with the value "No Tools"
"No Tools"
Was this page helpful?