curl --request POST \
--url https://{tenant_name}.{region}.techwolf.ai/export/employees/task_profiles \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"limit": 10,
"include": [
"ai_impact",
"source_events"
],
"filters": [
{
"filter": "is_active",
"is_active": true
}
]
}
'import requests
url = "https://{tenant_name}.{region}.techwolf.ai/export/employees/task_profiles"
payload = {
"limit": 10,
"include": ["ai_impact", "source_events"],
"filters": [
{
"filter": "is_active",
"is_active": True
}
]
}
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({
limit: 10,
include: ['ai_impact', 'source_events'],
filters: [{filter: 'is_active', is_active: true}]
})
};
fetch('https://{tenant_name}.{region}.techwolf.ai/export/employees/task_profiles', 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/export/employees/task_profiles",
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([
'limit' => 10,
'include' => [
'ai_impact',
'source_events'
],
'filters' => [
[
'filter' => 'is_active',
'is_active' => true
]
]
]),
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/export/employees/task_profiles"
payload := strings.NewReader("{\n \"limit\": 10,\n \"include\": [\n \"ai_impact\",\n \"source_events\"\n ],\n \"filters\": [\n {\n \"filter\": \"is_active\",\n \"is_active\": true\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/export/employees/task_profiles")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"limit\": 10,\n \"include\": [\n \"ai_impact\",\n \"source_events\"\n ],\n \"filters\": [\n {\n \"filter\": \"is_active\",\n \"is_active\": true\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://{tenant_name}.{region}.techwolf.ai/export/employees/task_profiles")
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 \"limit\": 10,\n \"include\": [\n \"ai_impact\",\n \"source_events\"\n ],\n \"filters\": [\n {\n \"filter\": \"is_active\",\n \"is_active\": true\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"has_next": true,
"next_starting_after": "id_4",
"records": [
{
"external_id": "61a6e076-d780-11ec-9d64-0242ac120002",
"tasks": [
{
"task_id": "56dcdb53-264e-f380-50bf-5179e2d082af",
"task": "Write unit tests for backend services",
"validation_state": "validated",
"weekly_hours": 5,
"ai_impact": {
"level": "H2",
"rationale": "Portions can be automated via LLM test generation"
},
"linked_skills": [
{
"skill_id": "4b85469d-6729-4d70-9876-a0faa2a2f63b",
"skill": "Python"
},
{
"skill_id": "e03c1859-3bae-4700-b2c5-ede2937038de",
"skill": "Test-Driven Development"
}
],
"source_events": [
{
"external_id": "5cbdbdbe-5f44-4423-8157-520f8a2f429a",
"event_type": "project"
}
]
},
{
"task_id": "b7d08d86-e744-1807-4a56-a08f854e9b2e",
"task": "Review pull requests for the analytics team",
"validation_state": "suggested",
"ai_impact": {
"level": "H3",
"rationale": "Requires human judgment for code quality assessment"
},
"linked_skills": [
{
"skill_id": "4b85469d-6729-4d70-9876-a0faa2a2f63b",
"skill": "Python"
}
],
"source_events": [
{
"external_id": "5cbdbdbe-5f44-4423-8157-520f8a2f429a",
"event_type": "project"
}
]
}
]
}
]
}Export Employee Task Profile data
Export Task Profiles for all Employees by paginating through the data.
Employees are returned in the order they were created (oldest first).
Employees without a task profile will be included with an empty tasks array.
Use the include parameter to optionally expand tasks with AI impact
information and/or their source events. Use filters to narrow the set of
Employees returned.
Note: This endpoint is experimental and may change in future versions.
curl --request POST \
--url https://{tenant_name}.{region}.techwolf.ai/export/employees/task_profiles \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"limit": 10,
"include": [
"ai_impact",
"source_events"
],
"filters": [
{
"filter": "is_active",
"is_active": true
}
]
}
'import requests
url = "https://{tenant_name}.{region}.techwolf.ai/export/employees/task_profiles"
payload = {
"limit": 10,
"include": ["ai_impact", "source_events"],
"filters": [
{
"filter": "is_active",
"is_active": True
}
]
}
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({
limit: 10,
include: ['ai_impact', 'source_events'],
filters: [{filter: 'is_active', is_active: true}]
})
};
fetch('https://{tenant_name}.{region}.techwolf.ai/export/employees/task_profiles', 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/export/employees/task_profiles",
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([
'limit' => 10,
'include' => [
'ai_impact',
'source_events'
],
'filters' => [
[
'filter' => 'is_active',
'is_active' => true
]
]
]),
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/export/employees/task_profiles"
payload := strings.NewReader("{\n \"limit\": 10,\n \"include\": [\n \"ai_impact\",\n \"source_events\"\n ],\n \"filters\": [\n {\n \"filter\": \"is_active\",\n \"is_active\": true\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/export/employees/task_profiles")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"limit\": 10,\n \"include\": [\n \"ai_impact\",\n \"source_events\"\n ],\n \"filters\": [\n {\n \"filter\": \"is_active\",\n \"is_active\": true\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://{tenant_name}.{region}.techwolf.ai/export/employees/task_profiles")
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 \"limit\": 10,\n \"include\": [\n \"ai_impact\",\n \"source_events\"\n ],\n \"filters\": [\n {\n \"filter\": \"is_active\",\n \"is_active\": true\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"has_next": true,
"next_starting_after": "id_4",
"records": [
{
"external_id": "61a6e076-d780-11ec-9d64-0242ac120002",
"tasks": [
{
"task_id": "56dcdb53-264e-f380-50bf-5179e2d082af",
"task": "Write unit tests for backend services",
"validation_state": "validated",
"weekly_hours": 5,
"ai_impact": {
"level": "H2",
"rationale": "Portions can be automated via LLM test generation"
},
"linked_skills": [
{
"skill_id": "4b85469d-6729-4d70-9876-a0faa2a2f63b",
"skill": "Python"
},
{
"skill_id": "e03c1859-3bae-4700-b2c5-ede2937038de",
"skill": "Test-Driven Development"
}
],
"source_events": [
{
"external_id": "5cbdbdbe-5f44-4423-8157-520f8a2f429a",
"event_type": "project"
}
]
},
{
"task_id": "b7d08d86-e744-1807-4a56-a08f854e9b2e",
"task": "Review pull requests for the analytics team",
"validation_state": "suggested",
"ai_impact": {
"level": "H3",
"rationale": "Requires human judgment for code quality assessment"
},
"linked_skills": [
{
"skill_id": "4b85469d-6729-4d70-9876-a0faa2a2f63b",
"skill": "Python"
}
],
"source_events": [
{
"external_id": "5cbdbdbe-5f44-4423-8157-520f8a2f429a",
"event_type": "project"
}
]
}
]
}
]
}Authorizations
The access token received from the authorization server in the OAuth 2.0 flow.
- Token URL
- https://techwolf.eu.auth0.com/oauth/token
Query Parameters
The external vendor vocabulary you want to see the Skills displayed in. This will only work for vendors that are activated on your tenant.
techwolf, workday, sap_attribute_library "workday"
The format of the response profile.
list, hierarchy "list"
Body
Number of Employees to return per page.
1 <= x <= 10010
The external_id of the last Employee seen. Used for cursor-based pagination. Omit on the first request.
100"id_9"
Additional attributes that will be included in the response body.
ai_impact— includes AI impact level and rationale per task.source_events— includes the source events behind each task.linked_skills— includes Skills linked to each task, with Skill ID and name. Use theexternal_vendorquery parameter to display Skill names in an external vendor vocabulary.rejected_tasks— includes tasks that were rejected via PATCH feedback (excluded by default).weekly_hours— includes the estimated number of hours spent on each task per week.
ai_impact, source_events, linked_skills, rejected_tasks, weekly_hours ["ai_impact", "source_events"]
A set of filters to apply on the exported Employees.
- is_active
- last_updated
Show child attributes
Show child attributes
Response
OK
True when there is more data after this page.
true
List of Employee task profile records.
Shape depends on response_format: each record contains either a flat tasks array (list) or a nested hierarchy tree (hierarchy).
Record shape when response_format=list (default). The profile consists of a flat list of Tasks assigned to the Employee.
- Option 1
- Option 2
Show child attributes
Show child attributes
{
"external_id": "61a6e076-d780-11ec-9d64-0242ac120002",
"tasks": [
{
"task_id": "56dcdb53-264e-f380-50bf-5179e2d082af",
"task": "Write unit tests for backend services",
"validation_state": "validated",
"weekly_hours": 5,
"ai_impact": {
"level": "H2",
"rationale": "Portions can be automated via LLM test generation"
},
"linked_skills": [
{
"skill_id": "4b85469d-6729-4d70-9876-a0faa2a2f63b",
"skill": "Python"
},
{
"skill_id": "e03c1859-3bae-4700-b2c5-ede2937038de",
"skill": "Test-Driven Development"
}
],
"source_events": [
{
"external_id": "5cbdbdbe-5f44-4423-8157-520f8a2f429a",
"event_type": "project"
}
]
},
{
"task_id": "b7d08d86-e744-1807-4a56-a08f854e9b2e",
"task": "Review pull requests for the analytics team",
"validation_state": "suggested",
"ai_impact": {
"level": "H3",
"rationale": "Requires human judgment for code quality assessment"
},
"linked_skills": [
{
"skill_id": "4b85469d-6729-4d70-9876-a0faa2a2f63b",
"skill": "Python"
}
],
"source_events": [
{
"external_id": "5cbdbdbe-5f44-4423-8157-520f8a2f429a",
"event_type": "job"
}
]
}
]
}
The cursor value to use as starting_after on the next request. Only present when has_next is true.
100"id_4"
Was this page helpful?