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}")
Moving Tasks Between Groups
To move tasks between board groups, use the move_tasks method. This is the correct way to change a task's group — edit_task does not support group changes.
Move a single task
from vaiz.models import MoveTaskItem, MoveTasksRequest
move_request = MoveTasksRequest(
moves=[
MoveTaskItem(
task_id="task_id",
to_group_id="target_group_id",
to_index=0 # Position in the target group
)
]
)
response = client.move_tasks(move_request)
print(f"Moved: {response.payload.success_ids}")
print(f"Failed: {response.payload.failed_ids}")
Move multiple tasks at once
move_request = MoveTasksRequest(
moves=[
MoveTaskItem(task_id="task_1", to_group_id="group_b", to_index=0),
MoveTaskItem(task_id="task_2", to_group_id="group_b", to_index=1),
MoveTaskItem(task_id="task_3", to_group_id="group_c", to_index=0),
]
)
response = client.move_tasks(move_request)
You can move tasks to different groups in a single request. Each move specifies its own target group and position.
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