Overview
Tasks (タスク)
タスク API
タスク API リファレンス
TaskWorks API のタスク管理関連エンドポイントの詳細ドキュメントです。
# タスク API リファレンス
TaskWorks API のタスク管理関連エンドポイントの詳細ドキュメントです。すべてのエンドポイントはユーザー固有のデータのみを返します(RLS保護)。
## 認証方式
### ApiKey 認証(推奨)
```
Authorization: ApiKey <token>
```
- 設定 > APIキー管理 から生成
- トークンは一度しか表示されないため安全に保管
- ほとんどのエンドポイントで使用可能
### Bearer トークン認証
```
Authorization: Bearer <token>
```
- サービス間通信で使用
- 一部のエンドポイントで必須(例: /api/v1/blocks/windows)
### Cookie 認証
- 標準のセッションベース認証
- Webクライアントで使用
- Cookie専用エンドポイントで必須
## 共通レスポンス形式
すべての成功レスポンスは以下の構造に従います:
```json
{
"data": <response_data>,
"error": null
}
```
すべてのエラーレスポンスは以下の構造に従います:
```json
{
"error": "<error_type>",
"message": "<human_readable_message>",
"code": "<optional_error_code>",
"context": <optional_additional_context>
}
```
## HTTP ステータスコード
- 200: 成功
- 201: 作成完了
- 400: 不正なリクエスト(検証エラー)
- 401: 未認証(認証が必要)
- 403: 禁止(権限なし)
- 404: 未検出
- 409: 衝突(リソースの競合)
- 500: サーバー内部エラー
## ページネーション
一部のエンドポイントはカーソルベースのページネーションをサポート:
- cursor: 次ページの開始位置
- limit: 返す項目数(1-100、デフォルトはエンドポイントにより異なる)
レスポンス形式:
```json
{
"data": {
"items": [...],
"nextCursor": "string | null",
"hasMore": boolean
},
"error": null
}
```
## API エンドポイント
### タスク(Tasks)
#### GET /api/v1/tasks
認証済みユーザーの全タスクを取得します。
**認証:** ApiKey / Bearer / Cookie
**クエリパラメータ:**
- active: boolean(オプション)- アクティブ状態でフィルタリング
- kind: string(オプション)- タスク種別でフィルタリング("single" | "habit")
**レスポンス スキーマ:**
```json
{
"data": [
{
"id": "string",
"title": "string",
"description": "string | null",
"kind": "single" | "habit",
"active": boolean,
"start_date": "string | null",
"end_date": "string | null",
"created_at": "string",
"updated_at": "string",
"period_rules": Array<PeriodRule>,
"time_rules": Array<TimeRule>,
"tags": Array<{ "id": string, "name": string }>
}
],
"error": null
}
```
---
#### POST /api/v1/tasks
新しいタスクを作成します。
**認証:** ApiKey / Bearer / Cookie
**リクエストボディ:**
```json
{
"title": "string (required)",
"description": "string | null",
"kind": "single" | "habit",
"active": boolean,
"start_date": "string | null",
"end_date": "string | null"
}
```
**レスポンス スキーマ:**
```json
{
"data": {
"id": "string",
"title": "string",
"description": "string | null",
"kind": "single" | "habit",
"active": boolean,
"start_date": "string | null",
"end_date": "string | null",
"created_at": "string",
"updated_at": "string",
"period_rules": Array<PeriodRule>,
"time_rules": Array<TimeRule>
},
"error": null
}
```
**エラーケース:**
- 400: タイトルは必須です
---
#### GET /api/v1/tasks/today
今日のタスクを時間帯付きで取得します。
**認証:** ApiKey / Bearer / Cookie
**クエリパラメータ:**
- date: string(オプション、ISO 8601形式、例: "2025-01-17")
- timezone: string(オプション、デフォルト: "Asia/Tokyo")
**レスポンス スキーマ:**
```json
{
"data": {
"date": "string",
"timezone": "string",
"tasks": [
{
"taskId": "string",
"slotId": "string",
"title": "string",
"kind": "single" | "habit",
"tags": Array<string>,
"timeLabel": "string",
"anytime": boolean,
"startTime": "string | null",
"endTime": "string | null",
"target": number,
"completed": number,
"remaining": number,
"status": "todo" | "done" | "skipped",
"sortMinutes": number
}
]
},
"error": null
}
```
**エラーケース:**
- 400: 無効な日付形式
- 401: 認証が必要です
---
#### GET /api/v1/tasks/overview
タスクの概要と統計情報を取得します。
**認証:** ApiKey / Bearer / Cookie
**クエリパラメータ:**
- date: string(オプション、ISO 8601形式)
- timezone: string(オプション、デフォルト: "Asia/Tokyo")
**レスポンス スキーマ:**
```json
{
"data": {
"date": "string",
"timezone": "string",
"today": Array<TodayTaskRow>,
"stats": {
"totalTasks": number,
"completedTasks": number,
"remainingTasks": number,
"completionRate": number
}
},
"error": null
}
```
---
#### GET /api/v1/tasks/search
キーワードでタスクを検索します。
**認証:** ApiKey / Bearer / Cookie
**クエリパラメータ:**
- q: string(必須)- 検索キーワード
- limit: number(オプション、1-50、デフォルト: 8)
**レスポンス スキーマ:**
```json
{
"data": [
{
"id": "string",
"title": "string",
"description": "string | null",
"kind": "single" | "habit"
}
],
"error": null
}
```
**エラーケース:**
- 400: 検索キーワードは必須、または limit が無効です
---
#### GET /api/v1/tasks/streak
現在の連続達成日数を取得します。
**認証:** ApiKey / Bearer / Cookie
**レスポンス スキーマ:**
```json
{
"data": {
"current": number,
"longest": number,
"breakDate": "string | null"
},
"error": null
}
```
**備考:** 未認証時は current / longest に 0 が返されます。
---
#### GET /api/v1/tasks/:id
特定のタスク詳細を取得します。
**認証:** ApiKey / Bearer / Cookie
**パスパラメータ:**
- id: string(必須)- タスクID
**レスポンス スキーマ:**
```json
{
"data": {
"id": "string",
"title": "string",
"description": "string | null",
"kind": "single" | "habit",
"active": boolean,
"start_date": "string | null",
"end_date": "string | null",
"period_rules": Array<PeriodRule>,
"time_rules": Array<TimeRule>,
"tags": Array<{ "id": string, "name": string }>
},
"error": null
}
```
---
#### PUT /api/v1/tasks/:id
特定のタスクを更新します。
**認証:** ApiKey / Bearer / Cookie
**パスパラメータ:**
- id: string(必須)- タスクID
**リクエストボディ:**
```json
{
"title": "string",
"description": "string | null",
"kind": "single" | "habit",
"active": boolean,
"start_date": "string | null",
"end_date": "string | null"
}
```
**レスポンス スキーマ:** GET /api/v1/tasks/:id と同じ
---
#### DELETE /api/v1/tasks/:id
特定のタスクを削除します。
**認証:** ApiKey / Bearer / Cookie
**パスパラメータ:**
- id: string(必須)- タスクID
**レスポンス スキーマ:**
```json
{
"data": {
"success": true
},
"error": null
}
```
---
#### POST /api/v1/tasks/:id/execute
タスク実行を記録し、報酬を付与します。
**認証:** ApiKey / Bearer / Cookie
**パスパラメータ:**
- id: string(必須)- タスクID
**リクエストボディ:**
```json
{
"qty": number (optional, default: 1)
}
```
**レスポンス スキーマ:**
```json
{
"data": {
"success": boolean,
"qty": number,
"rewardTotal": number,
"rewardErrors": Array<{ "source": string, "message": string }>,
"streakDays": number
},
"error": null
}
```
---
#### POST /api/v1/tasks/:id/skip
理由付きでタスクをスキップします。
**認証:** ApiKey / Bearer / Cookie
**パスパラメータ:**
- id: string(必須)- タスクID
**リクエストボディ:**
```json
{
"reason": "string",
"scheduled_date": "string"
}
```
**レスポンス スキーマ:**
```json
{
"data": {
"id": "string",
"task_id": "string",
"reason": "string",
"scheduled_date": "string",
"skipped_at": "string"
},
"error": null
}
```
---
#### DELETE /api/v1/tasks/:id/skip
タスクのスキップをキャンセルします。
**認証:** ApiKey / Bearer / Cookie
**パスパラメータ:**
- id: string(必須)- タスクID
**レスポンス スキーマ:**
```json
{
"data": {
"success": true
},
"error": null
}
```