Milestones & Tasks¶
Create Milestone¶
Endpoint: POST /milestones/
Description: Create a new milestone for Mother or Child.
Request Body:
{
"name": "First Steps",
"description": "Baby's first steps!",
"category": "Development",
"child_id": "child_uuid",
"finish_date": "2025-12-25T10:00:00Z"
}
Response: 201 Created
{
"id": "milestone_uuid",
"owner_id": "user_uuid",
"owner_type": "child",
"name": "First Steps",
"description": "Baby's first steps!",
"status": "pending",
"category": "Development",
"finish_date": "2025-12-25T10:00:00Z",
"created_at": "2025-11-27T10:00:00Z",
"updated_at": "2025-11-27T10:00:00Z"
}
Toggle Milestone Status¶
Endpoint: PATCH /milestones/{milestone_id}/status
Description: Toggle milestone status between 'pending' and 'completed'.
Request Body:
Response: 201 Created
{
"id": "milestone_uuid",
"owner_id": "user_uuid",
"owner_type": "child",
"name": "First Steps",
"description": "Baby's first steps!",
"status": "completed",
"category": "Development",
"finish_date": "2025-12-25T10:00:00Z",
"created_at": "2025-11-27T10:00:00Z",
"updated_at": "2025-11-27T10:00:00Z"
}
Update Milestone¶
Endpoint: PUT /milestones/{milestone_id}
Description: Update milestone details (name, description, category).
Request Body:
Response: 200 OK
{
"id": "milestone_uuid",
"owner_id": "user_uuid",
"owner_type": "child",
"name": "Baby's First Steps",
"description": "Baby's first steps!",
"status": "completed",
"category": "Development",
"finish_date": "2025-12-25T10:00:00Z",
"created_at": "2025-11-27T10:00:00Z",
"updated_at": "2025-11-27T10:00:00Z"
}
Delete Milestone¶
Endpoint: DELETE /milestones/{milestone_id}
Description: Permanently delete a milestone.
Response: 200 OK
Get Pending Milestones¶
Endpoint: GET /milestones/pending
Description: Get all pending milestones for Mother or Child.
Query Parameters:
- child_id (UUID): Filter by child ID
Response: 200 OK
{
"details": [
{
"id": "milestone_uuid",
"owner_id": "user_uuid",
"owner_type": "child",
"name": "First Steps",
"description": "Baby's first steps!",
"status": "pending",
"category": "Development",
"finish_date": "2025-12-25T10:00:00Z",
"created_at": "2025-11-27T10:00:00Z",
"updated_at": "2025-11-27T10:00:00Z"
}
]
}
Get All Milestones¶
Endpoint: GET /milestones/
Description: Get all milestones with optional filters.
Query Parameters:
- child_id (UUID): Filter by child ID
- category (string): Filter by category
Response: 200 OK
{
"details": [
{
"id": "milestone_uuid",
"owner_id": "user_uuid",
"owner_type": "child",
"name": "First Steps",
"description": "Baby's first steps!",
"status": "pending",
"category": "Development",
"finish_date": "2025-12-25T10:00:00Z",
"created_at": "2025-11-27T10:00:00Z",
"updated_at": "2025-11-27T10:00:00Z"
}
]
}
Get Milestone Progress¶
Endpoint: GET /milestones/progress
Description: Get overall milestone progress statistics.
Query Parameters:
- child_id (UUID): Filter by child ID
Response: 200 OK
Get Milestone Summary¶
Endpoint: GET /milestones/summary
Description: Get milestone summary for a specific time period.
Query Parameters:
- child_id (UUID): Filter by child ID
- duration (string): Time period for summary (day, week, month, year)
Response: 200 OK
{
"completed_milestones": {
"count": 1,
"milestones": [
{
"id": "milestone_uuid",
"name": "First Steps",
"description": "Baby's first steps!",
"category": "Development"
}
]
},
"created_milestones": {
"count": 1,
"milestones": [
{
"id": "milestone_uuid_2",
"name": "First Words",
"description": "Baby's first words!",
"category": "Development",
"status": "pending"
}
]
}
}
Get Available Categories¶
Endpoint: GET /milestones/categories
Description: Get available milestone categories based on owner type.
Query Parameters:
- child_id (UUID): If provided, returns child categories; otherwise returns mother categories
Response: 200 OK
{
"categories": [
{
"value": "Development",
"label": "Development"
},
{
"value": "Health and Nutrition",
"label": "Health and Nutrition"
}
]
}
Create Task¶
Endpoint: POST /tasks/
Description: Create a new task.
Request Body:
{
"name": "Buy Diapers",
"description": "Buy diapers from the store.",
"due_date": "2025-11-28T10:00:00Z",
"reminder_enabled": true,
"reminder_time": "2025-11-28T09:00:00Z"
}
Response: 201 Created
{
"id": "task_uuid",
"name": "Buy Diapers",
"description": "Buy diapers from the store.",
"due_date": "2025-11-28T10:00:00Z",
"status": "pending",
"completed_at": null,
"reminder_enabled": true,
"reminder_time": "2025-11-28T09:00:00Z",
"notification_sent": false,
"created_at": "2025-11-27T10:00:00Z",
"updated_at": "2025-11-27T10:00:00Z"
}
Delete Task¶
Endpoint: DELETE /tasks/{task_id}
Description: Delete a task.
Response: 200 OK
Edit Task¶
Endpoint: PATCH /tasks/{task_id}
Description: Edit an existing task.
Request Body:
Response: 200 OK
{
"id": "task_uuid",
"name": "Buy More Diapers",
"description": "Buy diapers from the store.",
"due_date": "2025-11-28T10:00:00Z",
"status": "pending",
"completed_at": null,
"reminder_enabled": true,
"reminder_time": "2025-11-28T09:00:00Z",
"notification_sent": false,
"created_at": "2025-11-27T10:00:00Z",
"updated_at": "2025-11-27T10:00:00Z"
}
List Tasks¶
Endpoint: GET /tasks/
Description: Get paginated list of tasks for the current user with optional status filter and ordering.
Query Parameters:
- page (integer): Page number
- per_page (integer): Items per page
- task_status (string): Filter by status
- order_by (string): Field to order by
- order_direction (string): Order direction (asc or desc)
Response: 200 OK
{
"details": [
{
"id": "task_uuid",
"name": "Buy Diapers",
"description": "Buy diapers from the store.",
"due_date": "2025-11-28T10:00:00Z",
"status": "pending",
"completed_at": null,
"created_at": "2025-11-27T10:00:00Z",
"updated_at": "2025-11-27T10:00:00Z"
}
],
"pagination": {
"page": 1,
"per_page": 10,
"total_count": 1,
"total_pages": 1,
"next": null,
"prev": null
}
}
Toggle Task Completion¶
Endpoint: PATCH /tasks/{task_id}/status
Description: Toggles the completion status of a task.
Request Body:
Response: 200 OK
{
"id": "task_uuid",
"name": "Buy Diapers",
"description": "Buy diapers from the store.",
"due_date": "2025-11-28T10:00:00Z",
"status": "completed",
"completed_at": "2025-11-27T10:00:00Z",
"reminder_enabled": true,
"reminder_time": "2025-11-28T09:00:00Z",
"notification_sent": false,
"created_at": "2025-11-27T10:00:00Z",
"updated_at": "2025-11-27T10:00:00Z"
}