Tasks
Complete reference for working with tasks in the Vaiz SDK.
Creating Tasks
Basic Task
from vaiz import VaizClient
from vaiz.models import CreateTaskRequest, TaskPriority
client = VaizClient(api_key="...", space_id="...")
task = CreateTaskRequest(
name="Implement user authentication",
board="board_id",
group="group_id", # Optional - specify if board has groups
priority=TaskPriority.High
)
response = client.create_task(task)
print(f"Created: {response.task.id}")
group- Optional if board doesn't use groupsproject- Optional, API determines from board
Task with Description
Use the description parameter for convenience:
task = CreateTaskRequest(
name="Task Name",
board="board_id",
group="group_id"
)
response = client.create_task(
task,
description="Task description content"
)
Task with Dates
from datetime import datetime
task = CreateTaskRequest(
name="Project Milestone",
board="board_id",
group="group_id",
due_start=datetime(2025, 2, 1, 9, 0),
due_end=datetime(2025, 2, 15, 17, 0)
)
response = client.create_task(task)
Task with Files (Easy Way)
Upload and attach file in one step:
from vaiz.models import TaskUploadFile
from vaiz.models.enums import UploadFileType
task = CreateTaskRequest(
name="Review Document",
board="board_id",
group="group_id"
)
# File automatically uploaded and attached
response = client.create_task(
task,
file=TaskUploadFile(path="doc.pdf", type=UploadFileType.Pdf)
)
Task with Files (Manual Way)
Or upload manually and create TaskFile:
from vaiz.models import TaskFile
# Upload file
file_response = client.upload_file("doc.pdf", UploadFileType.Pdf)
# Create TaskFile
task_file = TaskFile(
url=file_response.file.url,
name=file_response.file.name,
ext=file_response.file.ext,
id=file_response.file.id,
type=file_response.file.type,
dimension=file_response.file.dimension
)
# Create task
task = CreateTaskRequest(
name="Review Document",
board="board_id",
group="group_id",
files=[task_file]
)
response = client.create_task(task)
Task with Blockers
Create tasks with dependency relationships:
# Task that is blocked by another task
task = CreateTaskRequest(
name="Implement Feature",
board="board_id",
group="group_id",
blockers=["design_task_id"] # This task depends on design task
)
response = client.create_task(task)
Learn more in Task Blockers documentation.
Updating Tasks
from vaiz.models import EditTaskRequest
edit = EditTaskRequest(
task_id="task_id",
name="Updated Name",
completed=True,
priority=TaskPriority.High
)
response = client.edit_task(edit)
Getting Tasks
Single Task
response = client.get_task("PRJ-123")
task = response.task
Multiple Tasks
from vaiz.models import GetTasksRequest
request = GetTasksRequest(
completed=False,
assignees=["user_id"],
limit=50
)
response = client.get_tasks(request)
for task in response.payload.tasks:
print(f"{task.hrid}: {task.name}")
Task Descriptions
Tasks store descriptions as structured JSON documents. The SDK provides convenient methods to work with descriptions directly from Task objects.
Important: Task descriptions support rich content using the same document structure format as standalone documents. You can use replace_json_document to create formatted task descriptions with headings, lists, links, and more.
Get Task Description
# Get from task object
task_response = client.get_task("PRJ-123")
task = task_response.task
document_id = task.document
# Get document content
description = client.get_json_document(document_id)
print(description) # JSON structure
Update Task Description
Replace task description completely:
# Get task
task_response = client.get_task("PRJ-123")
document_id = task_response.task.document
# Update description
new_content = """
# Updated Description
This completely replaces the previous content.
## Features
- Complete replacement
- Plain text support
- Direct API access
"""
client.replace_document(
document_id=document_id,
description=new_content
)
Rich Formatted Descriptions
For rich content with formatting, lists, and links, use replace_json_document:
from vaiz import heading, paragraph, text, bullet_list
# Get task
task_response = client.get_task("PRJ-123")
document_id = task_response.task.document
# Create rich content
content = [
heading(1, "Task Overview"),
paragraph(
"This task requires ",
text("immediate attention", bold=True),
"."
),
heading(2, "Requirements"),
bullet_list(
"Review design mockups",
"Update documentation",
"Test functionality"
),
paragraph(
"See ",
text("project docs", link="https://docs.example.com"),
" for details."
)
]
# Replace with rich content
client.replace_json_document(document_id, content)
See Document Structure for complete format reference and Document Structure Helpers for helper functions.
Using Task Helper Methods
The Task model provides convenient helper methods:
# Get task
task_response = client.create_task(task)
task_obj = task_response.task
# Get description using helper
description = task_obj.get_task_description(client)
print(description)
# Update description using helper
task_obj.update_task_description(
client,
"New task description content"
)
Full Workflow Example
from vaiz.models import CreateTaskRequest
# 1. Create task with initial description
task = CreateTaskRequest(
name="Documentation Task",
board="board_id",
group="group_id"
)
response = client.create_task(
task,
description="Initial task description"
)
# 2. Get task object
task_obj = response.task
# 3. Update description later
task_obj.update_task_description(
client,
"Updated task description with more details"
)
# 4. Read current content
content = task_obj.get_task_description(client)
print(content)
Programmatic Description Updates
from datetime import datetime
def add_status_update(task_id: str, status: str):
"""Append status update to task description"""
# Get task
task_response = client.get_task(task_id)
doc_id = task_response.task.document
# Get current content
current = client.get_json_document(doc_id)
# Add status update
timestamp = datetime.now().strftime("%Y-%m-%d %H:%M")
new_content = f"""
{current}
---
**Status Update ({timestamp})**: {status}
"""
client.replace_document(doc_id, new_content)
# Usage
add_status_update("PRJ-123", "Design phase completed")
If you need more control, you can work directly with the document ID from task.document field using the Documents API methods.
See Also
- Task Blockers - Manage task dependencies
- Files - File attachments
- Comments - Task discussions
- Documents - Document lists and management
- Examples - Code examples