Overview

DM (ダイレクトメッセージ)

+
DM API

ダイレクトメッセージ API リファレンス

TaskWorks API のダイレクトメッセージ関連エンドポイントの詳細ドキュメントです。

# ダイレクトメッセージ API リファレンス

TaskWorks API のダイレクトメッセージ関連エンドポイントの詳細ドキュメントです。

## 認証方式

### 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 エンドポイント

### ダイレクトメッセージ(DM)

#### GET /api/v1/dm/threads

DMスレッド一覧を取得します。

**認証:** Cookie のみ

**レスポンス スキーマ:**
```json
{
  "data": [
    {
      "id": "string",
      "userId": "string",
      "friendId": "string",
      "lastMessageAt": "string | null",
      "unreadCount": number,
      "friend": {
        "id": "string",
        "name": "string",
        "handle": "string",
        "avatarUrl": "string | null"
      }
    }
  ],
  "error": null
}
```

---

#### POST /api/v1/dm/threads

新しいDMスレッドを作成します(フレンド)。

**認証:** Cookie のみ

**リクエストボディ:**
```json
{
  "friendId": "string (required)"
}
```

**レスポンス スキーマ:**
```json
{
  "data": {
    "id": "string",
    "userId": "string",
    "friendId": "string",
    "createdAt": "string",
    "friend": Object
  },
  "error": null
}
```

---

#### GET /api/v1/dm/threads/:threadId

スレッドのメッセージを取得します。

**認証:** Cookie のみ

**パスパラメータ:**
- threadId: string(必須)- スレッドID

**レスポンス スキーマ:**
```json
{
  "data": {
    "thread": Object,
    "messages": [
      {
        "id": "string",
        "threadId": "string",
        "senderId": "string",
        "content": "string",
        "createdAt": "string",
        "readAt": "string | null"
      }
    ]
  },
  "error": null
}
```

---

#### POST /api/v1/dm/threads/:threadId/messages

スレッドにメッセージを送信します。

**認証:** Cookie のみ

**パスパラメータ:**
- threadId: string(必須)- スレッドID

**リクエストボディ:**
```json
{
  "content": "string (required)"
}
```

**レスポンス スキーマ:**
```json
{
  "data": {
    "id": "string",
    "threadId": "string",
    "senderId": "string",
    "content": "string",
    "createdAt": "string"
  },
  "error": null
}
```

---

#### POST /api/v1/dm/threads/:threadId/read

スレッドを既読にします。

**認証:** Cookie のみ

**パスパラメータ:**
- threadId: string(必須)- スレッドID

**レスポンス スキーマ:**
```json
{
  "data": {
    "success": true
  },
  "error": null
}
```

---

#### GET /api/v1/dm/messages/:messageId

メッセージ詳細を取得します(削除用)。

**認証:** Cookie のみ

**パスパラメータ:**
- messageId: string(必須)- メッセージID

**レスポンス スキーマ:**
```json
{
  "data": {
    "id": "string",
    "threadId": "string",
    "senderId": "string",
    "content": "string",
    "createdAt": "string"
  },
  "error": null
}
```