History Events
Track all changes made to tasks and other entities.
Get Task History
from vaiz.models import GetHistoryRequest
from vaiz.models.enums import Kind
request = GetHistoryRequest(
kind=Kind.Task,
kindId="task_id"
)
response = client.get_history(request)
for history in response.payload.histories:
print(f"{history.key}: {history.createdAt}")
print(f" Changed by: {history.creatorId}")
print(f" Data: {history.data}")
Filter History
Exclude specific keys
# Track everything except description changes
request = GetHistoryRequest(
kind=Kind.Task,
kindId="task_id",
excludeKeys=["description", "customFields"]
)
response = client.get_history(request)
Include only specific keys
# Only get task creation and completion events
request = GetHistoryRequest(
kind=Kind.Task,
kindId="task_id",
keys=["TASK_CREATED", "TASK_COMPLETED"]
)
response = client.get_history(request)
Filter by date range
from datetime import datetime
request = GetHistoryRequest(
kind=Kind.Task,
kindId="task_id",
dateRangeStart=datetime(2025, 1, 1),
dateRangeEnd=datetime(2025, 6, 30),
)
response = client.get_history(request)
Filter by author
# Only changes made by specific members
request = GetHistoryRequest(
kind=Kind.Task,
kindId="task_id",
createdBy=["member_id_1", "member_id_2"]
)
response = client.get_history(request)
Limit results
# Get only the last 10 events
request = GetHistoryRequest(
kind=Kind.Task,
kindId="task_id",
limit=10
)
response = client.get_history(request)
Filter by tasks and groups
# Get board history filtered by specific tasks and groups
request = GetHistoryRequest(
kind=Kind.Board,
kindId="board_id",
tasksIds=["task_id_1", "task_id_2"],
groupsIds=["group_id_1"]
)
response = client.get_history(request)
Use Cases
Audit trail
def get_task_audit_trail(task_id: str):
"""Get complete audit trail for a task"""
request = GetHistoryRequest(
kind=Kind.Task,
kindId=task_id
)
response = client.get_history(request)
print(f"Audit Trail for {task_id}")
print("-" * 50)
for event in response.payload.histories:
print(f"{event.createdAt}: {event.key} changed")
print(f" By: {event.creatorId}")
print(f" Value: {event.data}")
print()
get_task_audit_trail("task_id")
Weekly activity report
from datetime import datetime, timedelta
def weekly_activity_report(task_id: str):
"""Get activity for the last 7 days"""
now = datetime.now()
week_ago = now - timedelta(days=7)
request = GetHistoryRequest(
kind=Kind.Task,
kindId=task_id,
dateRangeStart=week_ago,
dateRangeEnd=now,
excludeKeys=["description", "files"]
)
response = client.get_history(request)
for event in response.payload.histories:
print(f"{event.key} changed at {event.createdAt}")
print(f" New value: {event.data}")
Generate reports
def generate_activity_report(task_id: str):
"""Generate activity report for a task"""
request = GetHistoryRequest(
kind=Kind.Task,
kindId=task_id
)
response = client.get_history(request)
histories = response.payload.histories
# Count changes by type
changes = {}
for event in histories:
changes[event.key] = changes.get(event.key, 0) + 1
# Count contributors
contributors = set(event.creatorId for event in histories)
print(f"Total changes: {len(histories)}")
print(f"Contributors: {len(contributors)}")
print("\nChanges by type:")
for key, count in sorted(changes.items(), key=lambda x: x[1], reverse=True):
print(f" {key}: {count}")
Complete example
from datetime import datetime
from vaiz import VaizClient
from vaiz.models import GetHistoryRequest
from vaiz.models.enums import Kind
client = VaizClient(api_key="...", space_id="...")
# Get task
task_response = client.get_task("PRJ-123")
task_id = task_response.task.id
# Get all history
request = GetHistoryRequest(
kind=Kind.Task,
kindId=task_id
)
response = client.get_history(request)
print(f"Total changes: {len(response.payload.histories)}")
# Get history with all filters
filtered = GetHistoryRequest(
kind=Kind.Task,
kindId=task_id,
dateRangeStart=datetime(2025, 1, 1),
dateRangeEnd=datetime(2025, 12, 31),
limit=20,
excludeKeys=["description", "files", "customFields"]
)
response = client.get_history(filtered)
print(f"Important changes: {len(response.payload.histories)}")
for event in response.payload.histories:
print(f" {event.key}: {event.createdAt}")