Introduction
Welcome to the Real-time Chat API. This documentation covers all endpoints for authentication, user management, and messaging features.
Demo Accounts
After running php artisan
migrate --seed,
you can use these pre-defined accounts to test the API permissions and features.
Email: user@example.com
Pass: password
Email: user2@example.com
Pass: password
Email: user3@example.com
Pass: password
Base URL
https://chat.yuldoshew.uz/api
Authentication & Verification
This API uses Laravel Sanctum for authentication.
Register
/auth/register
| name* | string |
| email* | string |
| password* | string |
| password_confirmation* | string |
{
"status": "success",
"status_code": 201,
"message": "User registered successfully",
"data": {
"user": { "id": 4, "name": "Test", "email": "test@example.com" },
"access_token": "1|hVX5q...",
"token_type": "Bearer"
}
}
Login
/auth/login
| email* | string |
| password* | string |
{
"status": "success",
"status_code": 200,
"message": "Logged in successfully",
"data": {
"user": { "id": 4, "email": "test@example.com" },
"access_token": "2|3EnW...",
"token_type": "Bearer"
}
}
Forgot Password
/auth/forgot-password
| email* | string |
{
"status": "success",
"status_code": 200,
"message": "We have emailed your password reset link.",
"data": null
}
Reset Password
/auth/reset-password
| token* | string |
| email* | string |
| password* | string |
| password_confirmation* | string |
{
"status": "success",
"status_code": 200,
"message": "Your password has been reset.",
"data": null
}
Current User
/user/me
AUTH REQUIRED
{
"status": "success",
"status_code": 200,
"message": "User profile retrieved",
"data": {
"id": 4,
"name": "Test",
"email": "test@example.com"
}
}
Logout
/auth/logout
AUTH REQUIRED
{
"status": "success",
"status_code": 200,
"message": "Successfully logged out",
"data": null
}
Resend Verification
/auth/email/verification-notification
AUTH REQUIRED
{
"status": "success",
"message": "Verification link sent.",
"data": null
}
Verify Email
/auth/email/verify/{id}/{hash}
AUTH REQUIRED
{
"status": "success",
"message": "Email verified successfully.",
"data": null
}
Delete Account
/user/delete
AUTH REQUIRED
{
"status": "success",
"message": "Account deleted successfully",
"data": null
}
Update Profile
/user/update
AUTH REQUIRED
VERIFIED
| name | string |
| string |
{
"status": "success",
"message": "Profile updated successfully",
"data": {
"id": 4,
"name": "New Name",
"email": "new@example.com"
}
}
Update Password
/user/password/update
AUTH REQUIRED
VERIFIED
| current_password* | string |
| password* | string |
| password_confirmation* | string |
{
"status": "success",
"message": "Password updated successfully",
"data": null
}
User Search
/users/search?q={query}
AUTH REQUIRED
VERIFIED
| q* | query | Search term |
{
"status": "success",
"message": "3 user(s) found",
"data": [
{ "id": 1, "name": "Marjory", "email": "user@example.com" },
{ "id": 2, "name": "Rosemary", "email": "user2@example.com" }
]
}
User Status
/users/{user_id}/status
AUTH REQUIRED
VERIFIED
{
"status": "success",
"message": "User status retrieved",
"data": {
"id": 5,
"email_verified": true,
"created_at": "2026-01-31 17:45:40"
}
}
Group Search
/groups/search?q={query}
AUTH REQUIRED
VERIFIED
{
"status": "success",
"message": "Public groups retrieved successfully",
"data": [
{
"id": 1,
"name": "New Group",
"type": "group",
"users_count": 1
}
]
}
List Conversations
/conversations
AUTH REQUIRED
VERIFIED
{
"status": "success",
"data": [
{
"id": 2,
"name": "My Friend",
"type": "private",
"unread_count": 0,
"users": [ ... ]
}
]
}
Create Conversation
/conversations
AUTH REQUIRED
VERIFIED
| type* | string | 'private' or 'group' |
| name | string | Group name |
| user_id | int | Required if private |
| username | string | Required if group |
{
"status": "success",
"message": "Conversation created successfully",
"data": {
"id": 1,
"name": "New Group",
"type": "group"
}
}
{
"status": "success",
"message": "Conversation created successfully",
"data": {
"id": 2,
"name": "My Friend",
"type": "private"
}
}
Show Conversation
/conversations/show?conversation_id={id}
AUTH REQUIRED
VERIFIED
{
"status": "success",
"message": "Conversation details retrieved",
"data": {
"id": 1,
"name": "New Group",
"type": "group"
}
}
Add Participant
/conversations/add-participant
AUTH REQUIRED
VERIFIED
| conversation_id* | int |
| user_id* | int |
{
"status": "success",
"message": "User added successfully",
"data": {
"id": 1,
"users": [ ... ]
}
}
Remove Participant
/conversations/remove-participant
AUTH REQUIRED
VERIFIED
| conversation_id* | int |
| user_id* | int |
{
"status": "success",
"message": "Participant removed successfully",
"data": null
}
Leave Group
/conversations/leave
AUTH REQUIRED
VERIFIED
| conversation_id* | int |
{
"status": "success",
"message": "You left the group",
"data": null
}
Delete Conversation
/conversations/delete
AUTH REQUIRED
VERIFIED
| conversation_id* | int |
{
"status": "success",
"message": "Conversation deleted",
"data": null
}
Get Messages
/conversations/{id}/messages
AUTH REQUIRED
VERIFIED
{
"status": "success",
"message": "Messages retrieved successfully",
"data": {
"data": [
{
"id": 1,
"text": "hi",
"user_id": 5,
"read_at": null
}
],
"total": 1
}
}
Send Message
/messages
AUTH REQUIRED
VERIFIED
| conversation_id* | int |
| text* | string |
{
"status": "success",
"status_code": 201,
"message": "Message sent successfully",
"data": {
"id": 1,
"text": "hi",
"conversation_id": 1,
"user_id": 5
}
}
Read Message
/messages/{id}/read
AUTH REQUIRED
VERIFIED
{
"status": "success",
"status_code": 200,
"message": "Message marked as read",
"data": null
}
Delete Message
/messages/{id}
AUTH REQUIRED
VERIFIED
{
"status": "success",
"status_code": 200,
"message": "Message deleted successfully",
"data": null
}
Broadcasting
Example for Frontend
This application uses Pusher to broadcast server-side events to the frontend.
All connections require Bearer Token authentication via the built-in /broadcasting/auth
endpoint.
How it works:
Authentication
Client connects to Pusher and requests auth for private channels using the Bearer Token.
Subscription
Client subscribes to specific channels (e.g.,
chat.15) to listen for events.
Event Execution
When a message is sent via API, the server broadcasts an event, and the client receives the payload instantly.
Available Channels
| Channel Name | Event Class |
|---|---|
chat.{id} |
MessageSent, MessageRead |
App.Models.User.{id} |
ConversationCreated |
online |
Presence (User list) |
import Echo from 'laravel-echo'; window.Pusher = require('pusher-js'); window.Echo = new Echo({ broadcaster: 'pusher', key: 'PUSHER_APP_KEY', cluster: 'YOUR_CLUSTER', forceTLS: true, authEndpoint: '/api/broadcasting/auth', auth: { headers: { Authorization: 'Bearer ' + token } } });
// 1. Listen for new messages in a chat window.Echo.private(`chat.${convId}`) .listen('MessageSent', (e) => { console.log("New Message:", e.text); // Payload: {id, text, user: {id, name}, created_at} }) .listen('MessageRead', (e) => { // Update UI read status console.log("Message ID " + e.message_id + " was read"); }); // 2. Listen for new conversations (on User channel) window.Echo.private(`App.Models.User.${userId}`) .listen('ConversationCreated', (e) => { // Add new chat item to sidebar console.log("New conversation with:", e.name); });