# Chat API Documentation
This document provides detailed information about the Chat API endpoints for managing conversations and messages.
## Base URL
```
/chat
```
## Authentication
All endpoints require JWT authentication. Include the JWT token in the Authorization header:
```
Authorization: Bearer <your-jwt-token>
```
---
## 1. Create Conversation
Creates a new conversation in a specific channel.
### Endpoint
```http
POST /chat/conversations
```
### Request Body
```json
{
"channelId": 1
}
```
### Request Schema
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| channelId | number | Yes | ID of the channel where the conversation will be created |
### Response
```json
{
"success": true,
"statusCode": 201,
"message": "Conversation created successfully",
"data": {
"id": "13",
"channelId": "18",
"isRead": 0,
"createdAt": "2025-10-23T13:51:10.000Z",
"updatedAt": "2025-10-23T13:51:10.000Z",
"channel": {
"id": "18",
"name": "Beauty & Cosmetics",
"description": "Skincare, makeup, and beauty products for all occasions",
"channelCode": null
}
}
}
```
### Response Schema
| Field | Type | Description |
|-------|------|-------------|
| id | number | Unique conversation ID |
| channelId | number | ID of the associated channel |
| isRead | boolean | Whether the conversation has been read |
| createdAt | string | ISO timestamp of creation |
| updatedAt | string | ISO timestamp of last update |
| channel | object | Channel information |
### Error Responses
- **404 Not Found**: Channel not found
- **403 Forbidden**: User doesn't have access to the channel
- **401 Unauthorized**: Invalid or missing JWT token
---
## 2. List Conversations
Retrieves a paginated list of conversations for the authenticated user.
### Endpoint
```http
GET /chat/conversations
```
### Query Parameters
| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| page | number | No | 1 | Page number for pagination |
| limit | number | No | 10 | Number of conversations per page |
| channelId | number | No | - | Filter by specific channel ID |
| unreadOnly | boolean | No | false | Show only unread conversations |
### Example Request
```http
GET /chat/conversations?page=1&limit=10&unreadOnly=true
```
### Response
```json
{
"success": true,
"statusCode": 200,
"message": "Conversations retrieved successfully",
"data": [
{
"id": 1,
"channelId": 1,
"isRead": false,
"createdAt": "2024-01-15T10:30:00.000Z",
"updatedAt": "2024-01-15T11:45:00.000Z",
"channel": {
"id": 1,
"name": "Electronics & Gadgets",
"description": "Latest smartphones, laptops, and electronic accessories",
"channelCode": "CH000018"
},
"lastMessage": {
"id": 5,
"content": "Check out this new iPhone!",
"messageType": "text",
"senderId": 2,
"senderName": "John Doe",
"createdAt": "2024-01-15T11:45:00.000Z"
},
"unreadCount": 3
}
],
"pagination": {
"page": 1,
"limit": 10,
"total": 1,
"totalPages": 1
}
}
```
### Error Responses
- **401 Unauthorized**: Invalid or missing JWT token
---
## 3. Send Message
Sends a new message to a conversation.
### Endpoint
```http
POST /chat/messages
```
### Request Body
#### Text Message
```json
{
"conversationId": 1,
"message": "Hello, how are you?",
"messageType": "text"
}
```
#### Catalog Item Message
```json
{
"conversationId": 1,
"message": "Check out this product!",
"messageType": "catalog_item",
"catalogItemId": 5
}
```
#### Media Message
```json
{
"conversationId": 1,
"message": "Check this image",
"messageType": "img",
"mediaUrl": "https://example.com/image.jpg"
}
```
### Request Schema
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| conversationId | number | Yes | ID of the conversation |
| message | string | Yes | Message content |
| messageType | string | No | Type of message (default: "text") |
| catalogItemId | number | Conditional | Required when messageType is "catalog_item" |
| mediaUrl | string | No | URL for media messages (img, video, audio, etc.) |
### Message Types
- `text` - Plain text message
- `catalog_item` - Product/catalog item share
- `img` - Image message
- `video` - Video message
- `audio` - Audio message
- `file` - File attachment
- `sticker` - Sticker message
- `gif` - GIF message
### Response
```json
{
"success": true,
"statusCode": 201,
"message": "Message sent successfully",
"data": {
"id": 10,
"conversationId": 1,
"senderId": 2,
"message": "Hello, how are you?",
"messageType": "text",
"isRead": false,
"catalogItem": null,
"mediaUrl": null,
"createdAt": "2024-01-15T12:00:00.000Z",
"updatedAt": "2024-01-15T12:00:00.000Z",
"sender": {
"id": 2,
"firstName": "John",
"lastName": "Doe",
"email": "john.doe@example.com"
}
}
}
```
### Catalog Item Message Response
```json
{
"success": true,
"statusCode": 201,
"message": "Message sent successfully",
"data": {
"id": 11,
"conversationId": 1,
"senderId": 2,
"message": "Check out this product!",
"messageType": "catalog_item",
"isRead": false,
"catalogItem": {
"id": 5,
"name": "iPhone 15 Pro Max",
"description": "Latest Apple iPhone with A17 Pro chip",
"price": 1199.99,
"photoUrls": ["https://example.com/iphone.jpg"],
"discountPercentage": null
},
"mediaUrl": null,
"createdAt": "2024-01-15T12:05:00.000Z",
"updatedAt": "2024-01-15T12:05:00.000Z",
"sender": {
"id": 2,
"firstName": "John",
"lastName": "Doe",
"email": "john.doe@example.com"
}
}
}
```
### Error Responses
- **404 Not Found**: Conversation or catalog item not found
- **403 Forbidden**: User doesn't have access to the conversation
- **400 Bad Request**: Invalid message data or missing required fields
- **401 Unauthorized**: Invalid or missing JWT token
---
## 4. List Messages
Retrieves a paginated list of messages from a conversation.
### Endpoint
```http
GET /chat/messages
```
### Query Parameters
| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| page | number | No | 1 | Page number for pagination |
| limit | number | No | 50 | Number of messages per page |
| conversationId | number | No | - | Filter by specific conversation ID |
| unreadOnly | boolean | No | false | Show only unread messages |
### Example Request
```http
GET /chat/messages?conversationId=1&page=1&limit=20
```
### Response
```json
{
"success": true,
"statusCode": 200,
"message": "Messages retrieved successfully",
"data": [
{
"id": 10,
"conversationId": 1,
"senderId": 2,
"message": "Hello, how are you?",
"messageType": "text",
"isRead": true,
"catalogItem": null,
"mediaUrl": null,
"createdAt": "2024-01-15T12:00:00.000Z",
"updatedAt": "2024-01-15T12:00:00.000Z",
"sender": {
"id": 2,
"firstName": "John",
"lastName": "Doe",
"email": "john.doe@example.com"
}
},
{
"id": 11,
"conversationId": 1,
"senderId": 3,
"message": "Check out this amazing product!",
"messageType": "catalog_item",
"isRead": false,
"catalogItem": {
"id": 5,
"name": "iPhone 15 Pro Max",
"description": "Latest Apple iPhone with A17 Pro chip, 256GB storage",
"price": 1199.99,
"photoUrls": [
"https://example.com/iphone-front.jpg",
"https://example.com/iphone-back.jpg"
],
"discountPercentage": 10
},
"mediaUrl": null,
"createdAt": "2024-01-15T12:05:00.000Z",
"updatedAt": "2024-01-15T12:05:00.000Z",
"sender": {
"id": 3,
"firstName": "Jane",
"lastName": "Smith",
"email": "jane.smith@example.com"
}
}
],
"pagination": {
"page": 1,
"limit": 20,
"total": 2,
"totalPages": 1
}
}
```
### Response Schema
| Field | Type | Description |
|-------|------|-------------|
| id | number | Unique message ID |
| conversationId | number | ID of the conversation |
| senderId | number | ID of the message sender |
| message | string | Message content |
| messageType | string | Type of message |
| isRead | boolean | Whether the message has been read |
| catalogItem | object\|null | Catalog item data (if messageType is "catalog_item") |
| mediaUrl | string\|null | Media URL (for media messages) |
| createdAt | string | ISO timestamp of creation |
| updatedAt | string | ISO timestamp of last update |
| sender | object | Sender information |
### Error Responses
- **404 Not Found**: Conversation not found
- **403 Forbidden**: User doesn't have access to the conversation
- **401 Unauthorized**: Invalid or missing JWT token
---
## Error Response Format
All error responses follow this format:
```json
{
"success": false,
"statusCode": 400,
"message": "Error description",
"error": "Detailed error information"
}
```
## Status Codes
- **200 OK**: Request successful
- **201 Created**: Resource created successfully
- **400 Bad Request**: Invalid request data
- **401 Unauthorized**: Authentication required
- **403 Forbidden**: Access denied
- **404 Not Found**: Resource not found
- **500 Internal Server Error**: Server error