🔐 Authentication
▼
POST
/auth/register
PUBLIC
Register / Login user (phone-based)
▼
📥 Response (201)
{ "success": true, "data": { "user": {...}, "token": "1|abc...", "circles": [...] } }
📝 Request Form
name
string — max 255
phone
string — unique phone number
role
fcm_token
string — push notification ke liye
circles
JSON array — register ke saath circles banao
GET
/auth/me
🔒
Get current user profile + token info
▼
📥 Response (200)
{ "success": true, "data": { "user": {..., "latest_location": {...}}, "token_info": {...} } }
📝 Request Form
🔒 Bearer token header se authenticate hoga. Koi body field nahi.
PUT
/auth/profile
🔒
Update user profile (name, avatar)
▼
📝 Request Form
name
avatar_url
string (URL) — profile picture link
PUT
/auth/fcm-token
🔒
Update FCM push notification token
▼
📝 Request Form
fcm_token
string — from Firebase SDK
POST
/auth/logout
🔒
Logout — delete current token
▼
📝 Request Form
⚠️ Token server se delete ho jayega. Koi body field nahi.
⭕ Circles — CRUD
▼
GET
/circles
🔒
List all my circles
▼
📝 Request Form
Koi parameter nahi. Bearer token se user identify hoga.
POST
/circles
🔒
Create a new circle
▼
📝 Request Form
name
string — circle name
GET
/circles/{id}
🔒
Get circle details with members & places
▼
📝 Request Form
{id}
integer — URL mein {id} replace hoga
PUT
/circles/{id}
🔒
Update circle name (owner only)
▼
📝 Request Form
{id}
URL mein circle ka ID
name
DELETE
/circles/{id}
🔒
Delete circle (owner only)
▼
📝 Request Form
{id}
⚠️ Circle permanently delete ho jayega!
⚡ Circle Actions
▼
POST
/circles/join
🔒
Join circle with invite code
▼
📝 Request Form
invite_code
string — format: ABC-DEF (expires 24 hours)
POST
/circles/{id}/leave
🔒
Leave a circle (non-owner)
▼
📝 Request Form
{id}
Owner leave nahi kar sakta
POST
/circles/{id}/remove-member
🔒
Remove a member (owner only)
▼
📝 Request Form
{id}
Circle ka ID jis se member hatana hai
user_id
integer — jis member ko remove karna hai us ka ID
POST
/circles/{id}/regenerate-code
🔒
Regenerate invite code (owner only)
▼
📝 Request Form
{id}
Purana code expire ho jayega, naya generate hoga
GET
/circles/{id}/members-locations
🔒
Get all members' latest locations
▼
📝 Request Form
{id}
Sab members ki live location aayegi
GET
/circles/{id}/permissions
🔒
Get member permissions (owner only)
▼
📥 Response (200)
{ "success": true, "data": [
{ "user_id": 1, "name": "Owner", "role": "admin", "is_owner": true,
"can_invite": true, "can_add_places": true, "can_receive_member_alerts": true },
{ "user_id": 2, "name": "Member", "role": "member", "is_owner": false,
"can_invite": false, "can_add_places": false, "can_receive_member_alerts": false }
] }
📝 Request Form
{id}
Circle ID — sirf owner dekh sakta hai
PUT
/circles/{id}/permissions
🔒
Update member permissions (owner only)
▼
📥 Response (200)
{ "success": true, "message": "Member permissions updated",
"data": { "user_id": 2, "can_invite": true, "can_add_places": true, "can_receive_member_alerts": false } }
📝 Request Form
{id}
Circle ID — sirf owner update kar sakta hai
user_id
Jis member ki permissions change karni hain
can_invite
Invite code share karne ki permission
can_add_places
Places add/update karne ki permission
can_receive_member_alerts
Circle join/leave notifications receive karne ki permission
PUT
/circles/{id}/location-sharing
🔒
Toggle apni location sharing on/off for a circle
▼
📥 Response (200)
{ "success": true, "message": "Location sharing enabled for this circle",
"data": { "circle_id": 1, "is_location_sharing": true } }
📝 Request Form
{id}
Circle ID jisme location sharing toggle karni hai
is_enabled
Owner by default OFF hota hai — enable karna hoga
📍 Locations
▼
POST
/locations
🔒
Save single location (also emits Socket.IO)
▼
📝 Request Form
latitude
number — -90 to 90
longitude
number — -180 to 180
battery_level
integer — 0 to 100
activity_type
is_moving
recorded_at
datetime — kab record huyi thi
POST
/locations/batch
🔒
Save multiple locations (offline sync)
▼
📝 Request Form
locations
JSON array — har item mein latitude, longitude, recorded_at required
GET
/locations/history
🔒
Get location history (with date filter)
▼
📝 Request Form — Query Parameters
from
date — YYYY-MM-DD se filter
to
date — YYYY-MM-DD tak filter
limit
integer — default: 100, max: 1000
🏠 Places / Geofences
▼
GET
/circles/{circleId}/places
🔒
List all places in a circle
▼
📝 Request Form
{circleId}
Circle ka ID jis ke places chahiye
POST
/circles/{circleId}/places
🔒
Create a new place/geofence
▼
📝 Request Form
{circleId}
name
latitude
longitude
radius
integer (meters) — geofence ka radius
address
PUT
/circles/{circleId}/places/{placeId}
🔒
Update a place
▼
📝 Request Form
{circleId}
{placeId}
name
radius
meters
address
DELETE
/circles/{circleId}/places/{placeId}
🔒
Delete a place
▼
📝 Request Form
{circleId}
{placeId}
⚠️ Place permanently delete ho jayega