http://localhost:3000
This API uses JWT (JSON Web Token) for authentication. Include the token in the Authorization header:
Authorization: Bearer <access_token>
Public Routes:
GET /- Server health checkPOST /register- User registrationPOST /login- User login
Routes below need authentication:
Room Management:
GET /rooms- Get all roomsPOST /rooms/:id/join- Join a roomDELETE /rooms/:id/leave- Leave a room
Message Management:
GET /rooms/:roomId/messages- Get messages in a roomPOST /rooms/:roomId/messages- Send a text messagePOST /rooms/:roomId/messages/image- Send an image message
AI Features:
GET /ai/status- Get AI service statusPOST /rooms/:roomId/ai/summary- Generate AI summaryGET /rooms/:roomId/ai/summaries- Get AI summary historyPOST /rooms/:roomId/ai/response- Generate AI response
Server health check.
Request:
GET /
Response (200 - OK):
{
"message": "Chat-Cord Server is running!"
}Register a new user.
Request:
{
"username": "string",
"email": "string",
"password": "string"
}Response (201 - Created):
{
"id": "integer",
"username": "string",
"email": "string"
}Response (400 - Bad Request):
{
"message": "Username is required"
}OR
{
"message": "Email is required"
}OR
{
"message": "Password is required"
}OR
{
"message": "Username already exists. Please choose a different username."
}OR
{
"message": "Email address already exists. Please use a different email."
}Login user.
Request:
{
"email": "string",
"password": "string"
}Response (200 - OK):
{
"access_token": "string",
"id": "integer",
"username": "string",
"status": "string"
}Response (400 - Bad Request):
{
"message": "Email is required"
}OR
{
"message": "Password is required"
}Response (401 - Unauthorized):
{
"message": "Invalid email/password"
}Get all available rooms.
Request:
headers:
{
"Authorization": "Bearer <access_token>"
}
Response (200 - OK):
[
{
"id": "integer",
"name": "string",
"description": "string",
"isPrivate": "boolean",
"createdBy": "integer",
"createdAt": "string",
"updatedAt": "string",
"creator": {
"id": "integer",
"username": "string"
}
}
]Response (401 - Unauthorized):
{
"message": "Invalid token"
}Join a room.
Request:
headers:
{
"Authorization": "Bearer <access_token>"
}
params:
{
"id": "integer"
}
Response (200 - OK):
{
"message": "Successfully joined room",
"userRoom": {
"id": "integer",
"userId": "integer",
"roomId": "integer",
"joinedAt": "string"
}
}OR
{
"message": "Already a member of this room"
}Response (401 - Unauthorized):
{
"message": "Invalid token"
}Response (404 - Not Found):
{
"message": "Room not found"
}Leave a room.
Request:
headers:
{
"Authorization": "Bearer <access_token>"
}
params:
{
"id": "integer"
}
Response (200 - OK):
{
"message": "Successfully left room"
}Response (401 - Unauthorized):
{
"message": "Invalid token"
}Response (404 - Not Found):
{
"message": "Room not found"
}OR
{
"message": "Not a member of this room"
}Get messages from a specific room.
Request:
headers:
{
"Authorization": "Bearer <access_token>"
}
params:
{
"roomId": "integer"
}
query:
{
"limit": "integer", // optional, default: 50
"offset": "integer" // optional, default: 0
}
Response (200 - OK):
[
{
"id": "integer",
"content": "string",
"type": "string", // "text" or "image"
"isAI": "boolean",
"userId": "integer",
"roomId": "integer",
"createdAt": "string",
"updatedAt": "string",
"user": {
"id": "integer",
"username": "string",
"avatar": "string"
}
}
]Response (401 - Unauthorized):
{
"message": "Invalid token"
}Response (404 - Not Found):
{
"message": "Room not found"
}Send a text message to a room.
Request:
headers:
{
"Authorization": "Bearer <access_token>"
}
params:
{
"roomId": "integer"
}
body:
{
"content": "string",
"type": "string" // optional, default: "text"
}
Response (201 - Created):
{
"message": "Message sent successfully",
"data": {
"id": "integer",
"content": "string",
"type": "string",
"isAI": "boolean",
"userId": "integer",
"roomId": "integer",
"createdAt": "string",
"updatedAt": "string",
"user": {
"id": "integer",
"username": "string",
"avatar": "string"
}
}
}Response (400 - Bad Request):
{
"message": "Message content is required"
}Response (401 - Unauthorized):
{
"message": "Invalid token"
}Response (404 - Not Found):
{
"message": "Room not found"
}Send an image message to a room.
Request:
headers:
{
"Authorization": "Bearer <access_token>",
"Content-Type": "multipart/form-data"
}
params:
{
"roomId": "integer"
}
body:
{
"image": "file" // Image file
}
Response (201 - Created):
{
"message": "Image message sent successfully",
"data": {
"id": "integer",
"content": "string", // Cloudinary image URL
"type": "image",
"isAI": "boolean",
"userId": "integer",
"roomId": "integer",
"createdAt": "string",
"updatedAt": "string",
"user": {
"id": "integer",
"username": "string",
"avatar": "string"
}
}
}Response (400 - Bad Request):
{
"message": "Image file is required"
}OR
{
"message": "File too large. Maximum size is 5MB"
}OR
{
"message": "Invalid file type. Only JPEG, PNG, GIF, and WebP are allowed"
}Response (401 - Unauthorized):
{
"message": "Invalid token"
}Response (404 - Not Found):
{
"message": "Room not found"
}Get AI service status.
Request:
headers:
{
"Authorization": "Bearer <access_token>"
}
Response (200 - OK):
{
"message": "AI service status retrieved successfully",
"data": {
"isConfigured": "boolean",
"service": "string", // "OpenAI GPT-4.1-nano" or "Fallback summary generator"
"features": {
"summarization": "boolean",
"chatCompletion": "boolean",
"fallbackMode": "boolean"
}
}
}Response (401 - Unauthorized):
{
"message": "Invalid token"
}Generate AI summary of room messages.
Request:
headers:
{
"Authorization": "Bearer <access_token>"
}
params:
{
"roomId": "integer"
}
Response (201 - Created):
{
"message": "Summary generated successfully using AI method",
"data": {
"id": "integer",
"content": "string", // AI-generated summary
"type": "text",
"isAI": true,
"userId": "integer",
"roomId": "integer",
"createdAt": "string",
"updatedAt": "string",
"user": {
"id": "integer",
"username": "string",
"avatar": "string"
}
},
"method": "string" // "ai" or "fallback"
}Response (401 - Unauthorized):
{
"message": "Invalid token"
}Response (404 - Not Found):
{
"message": "Room not found"
}Get AI summary history for a room.
Request:
headers:
{
"Authorization": "Bearer <access_token>"
}
params:
{
"roomId": "integer"
}
query:
{
"limit": "integer", // optional, default: 10
"offset": "integer" // optional, default: 0
}
Response (200 - OK):
{
"message": "Summary history retrieved successfully",
"data": [
{
"id": "integer",
"content": "string",
"type": "text",
"isAI": true,
"userId": "integer",
"roomId": "integer",
"createdAt": "string",
"updatedAt": "string",
"user": {
"id": "integer",
"username": "string",
"avatar": "string"
}
}
],
"total": "integer"
}Response (401 - Unauthorized):
{
"message": "Invalid token"
}Response (404 - Not Found):
{
"message": "Room not found"
}Generate AI response to a prompt.
Request:
headers:
{
"Authorization": "Bearer <access_token>"
}
params:
{
"roomId": "integer"
}
body:
{
"prompt": "string",
"context": "integer" // optional, default: 5, number of recent messages for context
}
Response (201 - Created):
{
"message": "AI response generated successfully",
"data": {
"id": "integer",
"content": "string", // AI-generated response
"type": "text",
"isAI": true,
"userId": "integer",
"roomId": "integer",
"createdAt": "string",
"updatedAt": "string",
"user": {
"id": "integer",
"username": "string",
"avatar": "string"
}
},
"prompt": "string"
}Response (400 - Bad Request):
{
"message": "Prompt is required"
}Response (401 - Unauthorized):
{
"message": "Invalid token"
}Response (404 - Not Found):
{
"message": "Room not found"
}Response (503 - Service Unavailable):
{
"message": "AI service is not configured. Please set up OpenAI API key."
}Socket connections require JWT authentication:
const socket = io('http://localhost:3000', {
auth: {
token: 'your-jwt-token'
}
});join_room- Join a roomleave_room- Leave a roomsend_message- Send a text messagesend_image_message- Send an image messagetyping_start- Start typing indicatortyping_stop- Stop typing indicatorupdate_status- Update user status
connected- Connection confirmationroom_joined- Room join confirmationroom_left- Room leave confirmationnew_message- New message receiveduser_joined- User joined roomuser_left- User left roomuser_typing- User typing statususer_status_changed- User status updateuser_disconnected- User disconnectederror- Error message
// Join a room
socket.emit('join_room', { roomId: 1 });
// Send a message
socket.emit('send_message', {
roomId: 1,
content: 'Hello everyone!',
type: 'text'
});
// Listen for new messages
socket.on('new_message', (data) => {
console.log('New message:', data.message);
});
// Typing indicators
socket.emit('typing_start', { roomId: 1 });
socket.emit('typing_stop', { roomId: 1 });Response (500 - Internal Server Error):
{
"message": "Internal server error"
}Response (401 - Unauthorized):
{
"message": "Invalid token"
}OR
{
"message": "Authentication token required"
}Response (403 - Forbidden):
{
"message": "Access denied"
}{
"id": "integer",
"username": "string",
"email": "string",
"avatar": "string",
"status": "online|offline",
"lastSeen": "string",
"createdAt": "string",
"updatedAt": "string"
}{
"id": "integer",
"name": "string",
"description": "string",
"isPrivate": "boolean",
"createdBy": "integer",
"createdAt": "string",
"updatedAt": "string"
}{
"id": "integer",
"content": "string",
"type": "text|image",
"isAI": "boolean",
"userId": "integer",
"roomId": "integer",
"createdAt": "string",
"updatedAt": "string"
}{
"userId": "integer",
"roomId": "integer",
"joinedAt": "string"
}