📋 Task Planner API

API Documentation untuk Task Planner dengan fitur multi-merchant

Base URL: https://api.task.gutsylab.com/api
🔐 Authentication: API ini menggunakan Laravel Sanctum. Setelah login/register, gunakan token di header: Authorization: Bearer {token}

👤 Merchant Authentication

POST /merchant/register
Register new merchant
📤 Request Body:
{
  "name": "John Doe",
  "email": "john@example.com",
  "password": "password123",
  "password_confirmation": "password123",
  "phone": "081234567890",
  "address": "Jl. Example No. 123"
}
📥 Response (200):
{
  "success": true,
  "message": "Merchant registered successfully",
  "data": {
    "merchant": {
      "id": 1,
      "name": "John Doe",
      "email": "john@example.com",
      "phone": "081234567890",
      "address": "Jl. Example No. 123",
      "created_at": "2025-10-24T00:00:00.000000Z",
      "updated_at": "2025-10-24T00:00:00.000000Z"
    },
    "access_token": "1|abc123...",
    "token_type": "Bearer"
  }
}
POST /merchant/login
Login merchant
📤 Request Body:
{
  "email": "john@example.com",
  "password": "password123"
}
📥 Response (200):
{
  "success": true,
  "message": "Login successful",
  "data": {
    "merchant": {
      "id": 1,
      "name": "John Doe",
      "email": "john@example.com"
    },
    "access_token": "2|xyz789...",
    "token_type": "Bearer"
  }
}
GET /merchant/profile 🔒 Requires Auth
Get merchant profile
📤 Headers:
Authorization: Bearer {token}
📥 Response (200):
{
  "success": true,
  "data": {
    "id": 1,
    "name": "John Doe",
    "email": "john@example.com",
    "phone": "081234567890",
    "address": "Jl. Example No. 123"
  }
}
POST /merchant/logout 🔒 Requires Auth
Logout merchant
📤 Headers:
Authorization: Bearer {token}
📥 Response (200):
{
  "success": true,
  "message": "Logged out successfully"
}
POST /merchant/forgot-password
Request password reset link
📤 Request Body:
{
  "email": "john@example.com"
}
📥 Response (200):
{
  "success": true,
  "message": "Password reset link sent to your email"
}
POST /merchant/reset-password
Reset password with token from email
📤 Request Body:
{
  "token": "reset_token_from_email",
  "email": "john@example.com",
  "password": "newpassword123",
  "password_confirmation": "newpassword123"
}
📥 Response (200):
{
  "success": true,
  "message": "Password reset successfully"
}

📝 Tasks

GET /tasks 🔒 Requires Auth
Get all tasks for authenticated merchant
📤 Headers:
Authorization: Bearer {token}
📥 Response (200):
{
  "success": true,
  "data": [
    {
      "id": 1,
      "merchant_id": 1,
      "title": "Complete Project",
      "description": "Finish the task planner project",
      "due_at": "2025-10-30",
      "status": "in progress",
      "sort_order": 1,
      "created_at": "2025-10-24T00:00:00.000000Z",
      "updated_at": "2025-10-24T00:00:00.000000Z",
      "task_items": []
    }
  ]
}
POST /tasks 🔒 Requires Auth
Create new task
📤 Headers:
Authorization: Bearer {token}
📤 Request Body:
{
  "title": "Complete Project",
  "description": "Finish the task planner project",
  "due_at": "2025-10-30",
  "status": "todo",
  "sort_order": 1
}
📥 Response (201):
{
  "success": true,
  "message": "Task created successfully",
  "data": {
    "id": 1,
    "merchant_id": 1,
    "title": "Complete Project",
    "description": "Finish the task planner project",
    "due_at": "2025-10-30",
    "status": "todo",
    "sort_order": 1
  }
}
GET /tasks/{id} 🔒 Requires Auth
Get single task by ID
📤 Headers:
Authorization: Bearer {token}
📥 Response (200):
{
  "success": true,
  "data": {
    "id": 1,
    "merchant_id": 1,
    "title": "Complete Project",
    "description": "Finish the task planner project",
    "due_at": "2025-10-30",
    "status": "in progress",
    "sort_order": 1,
    "task_items": []
  }
}
PUT /tasks/{id} 🔒 Requires Auth
Update task
📤 Headers:
Authorization: Bearer {token}
📤 Request Body:
{
  "title": "Updated Task Title",
  "description": "Updated description",
  "due_at": "2025-11-01",
  "status": "in progress",
  "sort_order": 2
}
📥 Response (200):
{
  "success": true,
  "message": "Task updated successfully",
  "data": {
    "id": 1,
    "title": "Updated Task Title",
    "description": "Updated description",
    "due_at": "2025-11-01",
    "status": "in progress",
    "sort_order": 2
  }
}
DELETE /tasks/{id} 🔒 Requires Auth
Delete task
📤 Headers:
Authorization: Bearer {token}
📥 Response (200):
{
  "success": true,
  "message": "Task deleted successfully"
}
PATCH /tasks/{id}/status 🔒 Requires Auth
Update task status
📤 Headers:
Authorization: Bearer {token}
📤 Request Body:
{
  "status": "done"
}
📥 Response (200):
{
  "success": true,
  "message": "Task status updated successfully",
  "data": {
    "id": 1,
    "status": "done"
  }
}
PATCH /tasks/{id}/sort-order 🔒 Requires Auth
Update task sort order
📤 Headers:
Authorization: Bearer {token}
📤 Request Body:
{
  "sort_order": 3
}
📥 Response (200):
{
  "success": true,
  "message": "Task sort order updated successfully",
  "data": {
    "id": 1,
    "sort_order": 3
  }
}

✅ Task Items

GET /tasks/{taskId}/items 🔒 Requires Auth
Get all task items for a specific task
📤 Headers:
Authorization: Bearer {token}
📥 Response (200):
{
  "success": true,
  "data": [
    {
      "id": 1,
      "task_id": 1,
      "merchant_id": 1,
      "title": "Subtask 1",
      "description": "First subtask",
      "status": "todo",
      "sort_order": 1,
      "created_at": "2025-10-24T00:00:00.000000Z",
      "updated_at": "2025-10-24T00:00:00.000000Z"
    }
  ]
}
POST /tasks/{taskId}/items 🔒 Requires Auth
Create new task item
📤 Headers:
Authorization: Bearer {token}
📤 Request Body:
{
  "title": "Subtask 1",
  "description": "First subtask",
  "status": "todo",
  "sort_order": 1
}
📥 Response (201):
{
  "success": true,
  "message": "Task item created successfully",
  "data": {
    "id": 1,
    "task_id": 1,
    "merchant_id": 1,
    "title": "Subtask 1",
    "description": "First subtask",
    "status": "todo",
    "sort_order": 1
  }
}
GET /tasks/{taskId}/items/{id} 🔒 Requires Auth
Get single task item by ID
📤 Headers:
Authorization: Bearer {token}
📥 Response (200):
{
  "success": true,
  "data": {
    "id": 1,
    "task_id": 1,
    "merchant_id": 1,
    "title": "Subtask 1",
    "description": "First subtask",
    "status": "todo",
    "sort_order": 1
  }
}
PUT /tasks/{taskId}/items/{id} 🔒 Requires Auth
Update task item
📤 Headers:
Authorization: Bearer {token}
📤 Request Body:
{
  "title": "Updated Subtask",
  "description": "Updated description",
  "status": "in progress",
  "sort_order": 2
}
📥 Response (200):
{
  "success": true,
  "message": "Task item updated successfully",
  "data": {
    "id": 1,
    "title": "Updated Subtask",
    "description": "Updated description",
    "status": "in progress",
    "sort_order": 2
  }
}
DELETE /tasks/{taskId}/items/{id} 🔒 Requires Auth
Delete task item
📤 Headers:
Authorization: Bearer {token}
📥 Response (200):
{
  "success": true,
  "message": "Task item deleted successfully"
}
PATCH /tasks/{taskId}/items/{id}/status 🔒 Requires Auth
Update task item status
📤 Headers:
Authorization: Bearer {token}
📤 Request Body:
{
  "status": "done"
}
📥 Response (200):
{
  "success": true,
  "message": "Task item status updated successfully",
  "data": {
    "id": 1,
    "status": "done"
  }
}
PATCH /tasks/{taskId}/items/{id}/sort-order 🔒 Requires Auth
Update task item sort order
📤 Headers:
Authorization: Bearer {token}
📤 Request Body:
{
  "sort_order": 3
}
📥 Response (200):
{
  "success": true,
  "message": "Task item sort order updated successfully",
  "data": {
    "id": 1,
    "sort_order": 3
  }
}

📊 Status Values

🚀 Import ke Postman

Download atau import collection ini langsung ke Postman untuk testing API dengan mudah

💡 Cara Import:
1. Download file collection di atas
2. Buka Postman → klik "Import" → pilih file yang sudah didownload
3. Set variabel base_url dan token di Collection Variables
4. Siap untuk testing! 🎉