| name | time-tracking-3-toggl-track-reports |
| description | Sub-skill of time-tracking: 3. Toggl Track - Reports. |
| version | 1.0.0 |
| category | business |
| type | reference |
| scripts_exempt | true |
3. Toggl Track - Reports
3. Toggl Track - Reports
Reports API:
curl -s -X POST -u "$TOGGL_API_TOKEN:api_token" \
-H "Content-Type: application/json" \
"https://api.track.toggl.com/reports/api/v3/workspace/WORKSPACE_ID/summary/time_entries" \
-d '{
"start_date": "2025-01-01",
"end_date": "2025-01-31",
"grouping": "projects",
"sub_grouping": "users"
}' | jq
curl -s -X POST -u "$TOGGL_API_TOKEN:api_token" \
-H "Content-Type: application/json" \
"https://api.track.toggl.com/reports/api/v3/workspace/WORKSPACE_ID/search/time_entries" \
-d '{
"start_date": "2025-01-01",
"end_date": "2025-01-31",
"page_size": 50,
"first_row_number": 0
}' | jq
curl -s -X POST -u "$TOGGL_API_TOKEN:api_token" \
-H "Content-Type: application/json" \
"https://api.track.toggl.com/reports/api/v3/workspace/WORKSPACE_ID/weekly/time_entries" \
-d '{
"start_date": "2025-01-06",
"end_date": "2025-01-12",
"grouping": "projects"
}' | jq
Python - Reports:
class TogglReports:
"""Toggl Reports API client."""
REPORTS_URL = "https://api.track.toggl.com/reports/api/v3"
def __init__(self, api_token=None):
self.api_token = api_token or os.environ.get("TOGGL_API_TOKEN")
self.auth = (self.api_token, "api_token")
def _request(self, method, endpoint, data=None):
"""Make API request."""
url = f"{self.REPORTS_URL}{endpoint}"
response = requests.request(
method,
url,
auth=self.auth,
json=data,
headers={"Content-Type": "application/json"}
)
response.raise_for_status()
return response.json()
def summary_report(
self,
workspace_id,
start_date,
end_date,
grouping="projects",
sub_grouping=None,
project_ids=None,
user_ids=None
):
"""Generate summary report."""
data = {
"start_date": start_date.strftime("%Y-%m-%d"),
"end_date": end_date.strftime("%Y-%m-%d"),
"grouping": grouping
}
if sub_grouping:
data["sub_grouping"] = sub_grouping
project_ids:
data[] = project_ids
user_ids:
data[] = user_ids
._request(
,
,
data
)
():
data = {
: start_date.strftime(),
: end_date.strftime(),
: page_size,
: first_row
}
._request(
,
,
data
)
():
data = {
: start_date.strftime(),
: end_date.strftime(),
: grouping
}
._request(
,
,
data
)
__name__ == :
reports = TogglReports()
workspace_id =
start = datetime(, , )
end = datetime(, , )
summary = reports.summary_report(
workspace_id=workspace_id,
start_date=start,
end_date=end,
grouping=
)
()
group summary.get(, []):
total_hours = group.get(, ) /
()