curl --request POST \
--url https://{tenant_name}.{region}.techwolf.ai/reports/skill_inventory \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"entity_type": "employee",
"entity_columns": [
{
"column_name": "dim_column_name",
"property_name": "dim_property_name"
}
],
"entity_properties": [
{
"property_name": "fact_property_name"
}
]
}
'import requests
url = "https://{tenant_name}.{region}.techwolf.ai/reports/skill_inventory"
payload = {
"entity_type": "employee",
"entity_columns": [
{
"column_name": "dim_column_name",
"property_name": "dim_property_name"
}
],
"entity_properties": [{ "property_name": "fact_property_name" }]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
entity_type: 'employee',
entity_columns: [{column_name: 'dim_column_name', property_name: 'dim_property_name'}],
entity_properties: [{property_name: 'fact_property_name'}]
})
};
fetch('https://{tenant_name}.{region}.techwolf.ai/reports/skill_inventory', 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://{tenant_name}.{region}.techwolf.ai/reports/skill_inventory",
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([
'entity_type' => 'employee',
'entity_columns' => [
[
'column_name' => 'dim_column_name',
'property_name' => 'dim_property_name'
]
],
'entity_properties' => [
[
'property_name' => 'fact_property_name'
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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://{tenant_name}.{region}.techwolf.ai/reports/skill_inventory"
payload := strings.NewReader("{\n \"entity_type\": \"employee\",\n \"entity_columns\": [\n {\n \"column_name\": \"dim_column_name\",\n \"property_name\": \"dim_property_name\"\n }\n ],\n \"entity_properties\": [\n {\n \"property_name\": \"fact_property_name\"\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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://{tenant_name}.{region}.techwolf.ai/reports/skill_inventory")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"entity_type\": \"employee\",\n \"entity_columns\": [\n {\n \"column_name\": \"dim_column_name\",\n \"property_name\": \"dim_property_name\"\n }\n ],\n \"entity_properties\": [\n {\n \"property_name\": \"fact_property_name\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://{tenant_name}.{region}.techwolf.ai/reports/skill_inventory")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"entity_type\": \"employee\",\n \"entity_columns\": [\n {\n \"column_name\": \"dim_column_name\",\n \"property_name\": \"dim_property_name\"\n }\n ],\n \"entity_properties\": [\n {\n \"property_name\": \"fact_property_name\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body"<string>"{
"entity_details": {
"done": 100,
"total": 1000
},
"entity_skill_cluster_links": {
"done": 100,
"total": 1000
},
"skill_cluster_descriptions": {
"done": 100,
"total": 1000
},
"skill_cluster_info": {
"done": 100,
"total": 1000
}
}[
{
"title": "400 Bad Request",
"description": "The request body was not structured correctly."
}
][
{
"title": "401 Unauthorized",
"description": "OAuth access token is missing, invalid or expired."
}
][
{
"title": "403 Forbidden",
"description": "You don't have access to this resource."
}
][
{
"title": "405 Method Not Allowed",
"description": "This method is not allowed for the requested URL."
}
]"max connections reached: <limit>"[
{
"title": "503 Service Unavailable",
"description": "The Skill Engine API is currently not available. Please contact TechWolf or try again later."
}
]Get the Skill inventory report
Get your Skill inventory, the Skill Clusters of your entities, and where these originate from. This report generates a zip file containing the following files:
dim_{entity_type}.csv: A list of all entities in the system, containing external IDs and Custom Properties provided inentity_columns.fact_{entity_type}_property.csv: A list of Custom Property mappings containing external IDs of the entity, Custom Property name and Custom Property value for all the Custom Properties provided inentity_properties.dim_skill.csv: A list of all Skills referred to in the files above containing the external IDs, the name and the description.dim_skill_cluster.csv: A list of all Skill Clusters in the system, containing the name, the Domain name and their Skills.fact_{entity_type}_skill_cluster.csv: A list of the validation state and proficiency level for each combination of Employee and Skill Cluster.fact_skill_cluster.csv: A list of all Skills in each Skill Cluster, containing the Skill Cluster external IDs and Skill external IDs.fact_skill_source.csv: A list containing the source of each Skill of an Employee.
curl --request POST \
--url https://{tenant_name}.{region}.techwolf.ai/reports/skill_inventory \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"entity_type": "employee",
"entity_columns": [
{
"column_name": "dim_column_name",
"property_name": "dim_property_name"
}
],
"entity_properties": [
{
"property_name": "fact_property_name"
}
]
}
'import requests
url = "https://{tenant_name}.{region}.techwolf.ai/reports/skill_inventory"
payload = {
"entity_type": "employee",
"entity_columns": [
{
"column_name": "dim_column_name",
"property_name": "dim_property_name"
}
],
"entity_properties": [{ "property_name": "fact_property_name" }]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
entity_type: 'employee',
entity_columns: [{column_name: 'dim_column_name', property_name: 'dim_property_name'}],
entity_properties: [{property_name: 'fact_property_name'}]
})
};
fetch('https://{tenant_name}.{region}.techwolf.ai/reports/skill_inventory', 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://{tenant_name}.{region}.techwolf.ai/reports/skill_inventory",
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([
'entity_type' => 'employee',
'entity_columns' => [
[
'column_name' => 'dim_column_name',
'property_name' => 'dim_property_name'
]
],
'entity_properties' => [
[
'property_name' => 'fact_property_name'
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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://{tenant_name}.{region}.techwolf.ai/reports/skill_inventory"
payload := strings.NewReader("{\n \"entity_type\": \"employee\",\n \"entity_columns\": [\n {\n \"column_name\": \"dim_column_name\",\n \"property_name\": \"dim_property_name\"\n }\n ],\n \"entity_properties\": [\n {\n \"property_name\": \"fact_property_name\"\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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://{tenant_name}.{region}.techwolf.ai/reports/skill_inventory")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"entity_type\": \"employee\",\n \"entity_columns\": [\n {\n \"column_name\": \"dim_column_name\",\n \"property_name\": \"dim_property_name\"\n }\n ],\n \"entity_properties\": [\n {\n \"property_name\": \"fact_property_name\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://{tenant_name}.{region}.techwolf.ai/reports/skill_inventory")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"entity_type\": \"employee\",\n \"entity_columns\": [\n {\n \"column_name\": \"dim_column_name\",\n \"property_name\": \"dim_property_name\"\n }\n ],\n \"entity_properties\": [\n {\n \"property_name\": \"fact_property_name\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body"<string>"{
"entity_details": {
"done": 100,
"total": 1000
},
"entity_skill_cluster_links": {
"done": 100,
"total": 1000
},
"skill_cluster_descriptions": {
"done": 100,
"total": 1000
},
"skill_cluster_info": {
"done": 100,
"total": 1000
}
}[
{
"title": "400 Bad Request",
"description": "The request body was not structured correctly."
}
][
{
"title": "401 Unauthorized",
"description": "OAuth access token is missing, invalid or expired."
}
][
{
"title": "403 Forbidden",
"description": "You don't have access to this resource."
}
][
{
"title": "405 Method Not Allowed",
"description": "This method is not allowed for the requested URL."
}
]"max connections reached: <limit>"[
{
"title": "503 Service Unavailable",
"description": "The Skill Engine API is currently not available. Please contact TechWolf or try again later."
}
]Authorizations
The access token received from the authorization server in the OAuth 2.0 flow.
Query Parameters
Reports are always stored for a certain time, and if this endpoint is called again within that time, the stored report is returned without recalculating. If force_recalculate is set to true, the report is recalculated and the stored report is overwritten.
Body
Filters for the Skill inventory report.
Name of the entity type for which the report will be generated.
Employee 1"employee"
The Custom Property columns that will be included in the dim_{entity}.csv file. This can be an empty list.
Show child attributes
Show child attributes
The Custom Properties that will be included in the fact_{entity}_properties.csv file. This can be an empty list.
Show child attributes
Show child attributes
Response
OK.
The response is of type file.
Was this page helpful?