API Endpoints
Here in this file the Api endpoints will Documented
<------------------- Format ----------------->
1. [Title — e.g., Landing page]
URL: base_url/api/[endpoint, e.g., landing/]
Accepted Request(s): [GET, POST, PUT, DELETE]
GET:
return:
if status=200:
{
"success": true,
"data": [
{
"field_name": "value",
"example": "sample_data"
}
]
}
else if status=500:
{
"success": false,
"error": "Error message",
"message": "Detailed error description"
}
POST:
take:
{
"section_name": {
"field_name": "value",
"example": "sample_data"
}
}
return:
if status=201:
{
"success": true,
"message": "Success message"
}
else if status=400:
{
"success": false,
"error": "Error message",
"details": "Validation errors"
}
<------------------ Content --------------->
0. Common:
Input:
1. GetPlan (Any) ---> Landing page
URL: base_url/subscriptions/GetPlan/
Accepted Request(s): GET
GET:
return:
if status=200:
{
"success": true,
"data": {
"plans":[
{
"name": Str,
"short_description": Str,
"price": Decimal,
"key_features": [Str, Str, Str,...]
},.......
]
}
}
else if status=500: {
"success": False,
"error": "Failed to retrieve plan data",
"details": ""
}
2. Create Meeting (Any)
URL: base_url/meetings/CreateMeeting/
Accepted Request(s): POST
POST:
take: {
"title": Str, // Required
"requester_name": Str, // Required
"phone": Str, // Optional
"email": Str, // Required
"description": Str, // Required
"start_time": Str, // Required
"end_time": Str, // Optional
"time_zone": Str // Required
}
return:
if status=201:
{
"success": true,
"message": "Meeting created successfully",
"meeting": {
"id": Int,
"title": Str,
"requester_name": Str,
"phone": Str,
"email": Str,
"goal": Str,
"description": Str,
"start_time": Str,
"end_time": Str,
"time_zone": Str,
"status": Str,
"created_at": Str
}
}
else if status=400:
{
"success": false,
"error": "Invalid data",
"details": "Validation errors"
}
else if status=500:
{
"success": false,
"error": "Failed to create meeting",
"details": "Error message"
}
3. Save Query (Any)
URL: base_url/communication/SaveQuery/
Accepted Request(s): POST
POST:
take: {
"name": Str, // Required
"email": Str, // Required
"phone": Str, // Required
"message": Str // Required
}
return:
if status=201:
{
"success": true,
"message": "Query submitted successfully"
"data":{
"name": Str,
"email": Str,
"phone": Str,
"message": Str
}
}
else if status=400:
{
"success": false,
"error": "Invalid data",
"details": "Validation errors"
}
else if status=500:
{
"success": false,
"error": "Failed to submit query",
"details": "Error message"
}
4. Initialize Payment (Any)
URL: base_url/payments/InitializePayment/
Accepted Request(s): GET, POST
GET:
return:
if status=200:
{
"success": true,
"message": "Organization types retrieved successfully",
"data": {
"org_types": [
{ "name": Str, "value": Str }, ...
]
}
}
else if status=500:
{
"success": false,
"error": "Failed to retrieve organization types",
"details": Str
}
POST:
take: {
"organization": {
"name": Str, // Required
"type": Str, // Required (one of Organization.TYPE_CHOICES values)
"email": Str, // Required
"location": Str // Required
},
"admin": {
"first_name": Str, // Required
"last_name": Str, // Required
"email": Str, // Required
"password": Str, // Required
"re_password": Str // Required (must match password)
},
"subscription": {
"plan_id": Int, // Required (Subscription Plan ID)
"promo_code": Str|null, // Optional (Promotion code)
},
"redirect_links":{
"success": Str,
"cancel": Str
}
}
return:
if status=200:
{
"success": true,
"message": "Organization, Admin and Subscription created successfully",
"data": {
"organization": {
"name": Str,
"email": Str,
"type": Str,
"location": Str
},
"admin": {
"first_name": Str,
"last_name": Str,
"email": Str,
"username": Str
},
"subscription": {
"plan": Str, // Plan ID as string
"promo_code": Str, // Promo code ID as string (empty if none)
"payment": Str, // Payment ID as string
"auto_renew": Str // "true" or "false" as string
},
"payment": {
"amount": Decimal, // Payment amount
"currency": Str, // Currency code
"status": Str, // Payment status
"session_id": Str, // Stripe session ID
"url": Str // Stripe checkout URL
}
}
}
else if status=400:
{
"success": false,
"error": "Validation failed",
"details": Object
}
else if status=500:
{
"success": false,
"error": "Failed to create organization, admin, subscription and payment",
"details": Str
}
5. Login (Any)
URL: base_url/core/login/
Accepted Request(s): GET, POST
GET:
return: {
"success": True,
"sys_role": ['user', 'admin', 'super_admin']
}
POST:
take: {
"email": Str, // Required
"password": Str // Required
}
return:
if status=200:
{
'success': True,
'message': 'Login Successful',
'data': {
'refresh': Str,
'access': Str,
"sys_role": Str
}
}
else if status=400:{
"success": false,
"error": "Missing required fields" | "Validation failed",
"details": "Email and password are required" | Validation errors object
}
else if status=401:
{
"success": false,
"error": "Invalid credentials",
"message": "Email or password is incorrect"
}
else if status=500:
{
"success": false,
"error": "Login failed",
"details": Str,
"error_type": Str
}
6. Logout (User, Org Admin, Super admin)
URL: base_url/core/logout/
Headers: Authorization: Bearer <access_token>
Accepted Request(s): POST
POST:
take: {
"refresh": Str // Required
}
return:
if status=200:
{
"success": true,
"message": "Logged out successfully"
}
else if status=400:
{
"success": false,
"error": "Refresh token required" | "Invalid or expired refresh token",
"details": Str
}
else if status=500:
{
"success": false,
"error": "Logout failed",
"details": Str,
"error_type": Str
}
7. Refresh Access Token (User, Org Admin, Super admin)
URL: base_url/api/getNewAccessToken/
Accepted Request(s): POST
POST:
take:
{
"refresh": Str
}
return:
if status=200:
{
"access": Str
}
else if status=401:
{
"detail": Str,
"code": Str
}
8. Send OTP (Any)
URL: base_url/verification/sendOTP/
Accepted Request(s): POST
POST:
take: {
"email": Str, // Required
"verify_link" // Optional (ex:"https://frontend-server.com/verify/". This is where the token will be submitted form user. For testing porous may use :"{base_url}/verification/VerifyEmailByLink/--> POST {"token":Str})
}
return:
if status=201:
{
"success": true,
"message": "OTP sent by email successful. It will be invalid after 5 minutes"
"data": {
"email": Str
}
}
else if status=400:
{
"success": false,
"error": "Email is required" | "Invalid email format"
}
else if status=404:
{
"success": false,
"error": "This email does not exist in our system!"
}
else if status=429:
{
"success": false,
"error": "Too many requests for a day"
}
else if status=500:
{
"success": false,
"error": "OTP sending failed" | "OTP Creation failed",
"details": Str,
"error_type": Str
}
9. Verify OTP (Any)
URL: base_url/verification/verifyOTP/
Accepted Request(s): POST
POST:
take: {
"email": Str, // Required
"otp": Str // Required
}
return:
if status=200:
{
"success": true,
"message": "Email verified successfully",
"data": {"email": Str}
}
else if status=400:
{
"success": false,
"error": "Missing required fields" | "Invalid email format" | "OTP Expired. Please request for new one." | "Credentials are not valid",
"details": "Email and OTP are required" | Validation errors object
}
else if status=404:
{
"success": false,
"error": "Incorrect OTP" | "User not found"
}
else if status=500:
{
"success": false,
"error": "OTP verification failed",
"details": Str,
"error_type": Str
}
10. Verify Email By Token (Any)
URL: base_url/verification/VerifyEmailByToken/
Accepted Request(s): GET
POST:
take: {
"token": Str // Required
}
return:
if status=200:
{
"success": true,
"message": "Email verified successfully",
"data": {"email": Str}
}
else if status=400:
{
"success": false,
"error": "Token is required" | "Verification link has expired. Please request a new one." | "Invalid verification link."
}
else if status=404:
{
"success": false,
"error": "Invalid token format"
}
else if status=500:
{
"success": false,
"error": "Link verification failed",
"details": Str,
"error_type": Str
}
11. User navbar (User)
URL: base_url/core/Nav/
Note: role ∈ {User, Admin, SupAdmin}
Headers: Authorization: Bearer <access_token>
Accepted Request(s): GET
GET:
return:
if status=200:
{
"success": true,
"data": {
"first_name": Str | null,
"email": Str | null,
"photo": Str | null,
"sys_role"
}
}
else if status=401: {
"success": false,
"error": "Unauthorized",
"message": "You are not authorized to access this resource"
}
else if status=500:
{
"success": false,
"error": "Internal Server error",
"message": Str
}
12. FAQs (All)
URL: base_url/communication/Faqs/
Headers: Authorization: Bearer <access_token>
Accepted Request(s): GET, POST
GET:
params:
- keyword: Str (optional) // Filter FAQs by keyword in question or answer
return:
if status=200:
{
"success": true,
"data": [
{
"id": Int,
"question": Str,
"answer": Str
}, ...
]
}
else if status=401:
{
"success": false,
"error": "Unauthorized",
"message": "You are not authorized to access this resource"
}
else if status=500:
{
"success": false,
"error": "Internal Server error",
"message": Str
}
POST:
take: {
"question": Str, // Required
"answer": Str // Required
}
return:
if status=201:
{
"success": true,
"message": "FAQ submitted successfully",
"data": {
"id": Int,
"question": Str,
"answer": Str
}
}
else if status=400:
{
"success": false,
"error": "Invalid data",
"details": Object
}
else if status=401:
{
"success": false,
"error": "Unauthorized",
"message": "You are not authorized to access this resource"
}
else if status=500:
{
"success": false,
"error": "Internal Server error",
"message": Str
}
19.1. User Survey (Single) (User)
URL: base_url/surveys/UserSurvey/<int:id>/
Headers: Authorization: Bearer <access_token>
Accepted Request(s): GET, POST
GET:
return:
if status=200:
{
"success": true,
"data": {
"name": Str,
"details": Str | null,
"type": Str,
"expires_at": Str | null,
// One of the following will be present based on user's previous response
"responses": [
{
"id": Int,
"question_text": Str,
"type": "text" | "singleChoice" | "multiChoice" | "boolean",
"answer": Str | Bool | [Str]
}, ...
] |
"questions": [
{
"id": Int,
"question_text": Str,
"type": "text" | "singleChoice" | "multiChoice" | "boolean",
"options": [
{ "id": Int, "option_text": Str, "order_index": Int }, ...
] // present only for singleChoice/multiChoice
}, ...
]
}
}
else if status=403:
{
"success": false,
"error": "Access denied",
"message": "You don't have access to this survey"
}
else if status=404:
{
"success": false,
"error": "Not Found",
"message": "Survey not found"
}
else if status=401:
{
"success": false,
"error": "Unauthorized",
"message": "You are not authorized to access this resource"
}
else if status=500:
{
"success": false,
"error": "Internal Server error",
"message": Str
}
POST:
take:
{
// Map of question_id to answer based on question type
"<question_id>": Str, // for text
"<question_id>": Bool, // for boolean
"<question_id>": Int, // for singleChoice (option_id)
"<question_id>": [Int, Int] // for multiChoice (list of option_ids)
}
return:
if status=201:
{
"success": true,
"message": "<n> failed to submit and <m> submitted successfully",
"data": {
"response_id": Int,
"invalid_response": [ { "question_id": Int, "answer": Any, "message": Str }, ... ],
"valid_response": [ { "question_id": Int, "answer": Any }, ... ]
}
}
else if status=400:
{
"success": false,
"error": "Response already submitted" | "All Responses are required",
"message": "You have already submitted the survey" | "All Questions must be answered"
}
else if status=403:
{
"success": false,
"error": "Access denied",
"message": "You don't have access to this survey"
}
else if status=404:
{
"success": false,
"error": "Not Found",
"message": "Survey not found"
}
else if status=401:
{
"success": false,
"error": "Unauthorized",
"message": "You are not authorized to access this resource"
}
else if status=500:
{
"success": false,
"error": "Internal Server error",
"message": Str
}
17. Document Read-count (User, Org Admin, Supper Admin)
URL: base_url/documents/Count/
Headers: Authorization: Bearer <access_token>
Accepted Request(s):
- POST
POST:
takes:
{
"document_id": Read Count (Int),
"document_id": Read Count (Int),....
}
returns:
if status=201:
{
"success": true,
"message": "Read count updated",
"data": {
"document_id": Read Count (Int),
"document_id": Read Count (Int),....
}
}
else if status=400:
{
"success": false,
"error": "Invalid data",
"details": Object
}
else if status=401:
{
"success": false,
"error": "Unauthorized",
"message": "You are not authorized to access this resource"
}
else if status=500:
{
"success": false,
"error": "Internal Server Error",
"message": Str
}
18. Token-count (User, Org Admin, Supper Admin)
URL: base_url/ai/TokenCount/
Headers: Authorization: Bearer <access_token>
Accepted Request(s):
- GET
- POST
GET:
returns:
if status=201:
{
"success": true,
"message": "Use case type retrieved",
"data": [{"name": "value"},.....]
}
POST:
takes:
{
"type": Str ------> chatbot | summarization | policy_generation
"token": Int
}
returns:
if status=201:
{
"success": true,
"message": "Token record added",
"data": {
"user_id": int,
"organization_id: int",
"used_token: int"
}
}
else if status=400:
{
"success": false,
"error": "Invalid data",
"details": Object
}
else if status=401:
{
"success": false,
"error": "Unauthorized",
"message": "You are not authorized to access this resource"
}
else if status=500:
{
"success": false,
"error": "Internal Server Error",
"message": Str
}
<------------------------- User --------------------->
12. User Quick Summary (User)
URL: base_url/api/QuickSummary/
Headers: Authorization: Bearer <access_token>
Accepted Request(s): GET
GET:
return:
if status=200:
{
"success": true,
"data": {
"assigned_policies": Int,
"pending_induction": Int,
"pending_survey": Int,
"unseen_alerts": Int
}
}
else if status=401: {
"success": false,
"error": "Unauthorized",
"message": "You are not authorized to access this resource"
}
13. User Profile (User)
URL: base_url/core/Profile/
Note: role ∈ {User, Admin, SupAdmin}
Headers: Authorization: Bearer <access_token>
Accepted Request(s): GET, PATCH
GET:
return:
if status=200:
{
"success": true,
"data": {
"first_name": Str | null,
"last_name": Str | null,
"email": Str | null,
"phone": Str | null,
"country": Str | null,
"language": Str | null,
"address": Str | null,
"organization_name": Str | null,
"role_name": Str | null,
"photo": Str | null
}
}
else if status=401: {
"success": false,
"error": "Unauthorized",
"message": "You are not authorized to access this resource"
}
else if status=500:
{
"success": false,
"error": "Internal Server error",
"message": Str
}
PATCH:
take: {
"profile": { // Object
"first_name": Str, // Optional
"last_name": Str, // Optional
"email": Str, // Optional
"phone": Str, // Optional
"country": Str, // Optional
"language": Str, // Optional
"current_address": Str, // Optional
"permanent_address": Str, // Optional
"photo": File // Optional
}
}
return:
if status=200:
{
"success": true,
"message": "Profile updated successfully"
}
Note: If email is changed, is_email_verified will be automatically set to False
else if status=400:
{
"success": false,
"error": "Validation failed",
"details": Object
}
else if status=401:
{
"success": false,
"error": "Unauthorized",
"message": "You are not authorized to access this resource"
}
else if status=500:
{
"success": false,
"error": "Internal Server error",
"message": Str
}
14. User Settings (User)
URL: base_url/core/Settings/
Note: role ∈ {User, Admin, SupAdmin}
Headers: Authorization: Bearer <access_token>
Accepted Request(s): GET, PATCH
GET:
return:
if status=200:
{
"success": true,
"data": {
"timezone": Str | null,
"date_format": Str,
"email_notification": Bool,
"in_app_alerts": Bool,
"policy_update_alerts": Bool,
"language": Str
}
}
else if status=401:
{
"success": false,
"error": "Unauthorized",
"message": "You are not authorized to access this resource"
}
else if status=500:
{
"success": false,
"error": "Internal Server error",
"message": Str
}
PATCH:
take: {
"settings": { // Object
"timezone": Str, // Optional
"date_format": Str, // Optional
"email_notification": Bool, // Optional
"in_app_alerts": Bool, // Optional
"policy_update_alerts": Bool,// Optional
"language": Str // Optional
}
}
return:
if status=200:
{
"success": true,
"message": "Settings updated successfully"
}
else if status=400:
{
"success": false,
"error": "Validation failed",
"details": Object
}
else if status=401:
{
"success": false,
"error": "Unauthorized",
"message": "You are not authorized to access this resource"
}
else if status=500:
{
"success": false,
"error": "Internal Server error",
"message": Str
}
15. Organizational Documents (User, Org Admin)
URL: base_url/documents/OrgDocuments/
Note: role ∈ {User, Admin}
Headers: Authorization: Bearer <access_token>
Accepted Request(s): GET, POST
GET:
query parameters:
category: Str (optional, filter by document category)
key: Str (optional, search in name, tags, version description)
type: Str (optional, filter by document type)
returns:
if status=200:
{
"success": true,
"message": "Documents retrieved successfully",
"data": {
"filters": {
"types": [
{
"name": Str,
"value": Str
}, ...
],
"categories": [
{
"name": Str,
"value": Str
}, ...
]
},
"documents": [
{
"id": Int,
"name": Str,
"current_version": Str,
"type": Str,
"category": Str,
"updated_at": Str,
"versions": [
{
"id": Int,
"version": Str
}, ...
]
}, ...
],
"pagination": {
"count": Int,
"next": Str (URL or null),
"previous": Str (URL or null),
"page": Int,
"page_size": Int
}
}
}
else if status=401:
{
"success": false,
"error": "Unauthorized",
"message": "You are not authorized to access this resource"
}
else if status=500:
{
"success": false,
"error": "Internal Server error",
"message": Str
}
POST:
request body:
Multipart/Form-Data
fields:
name: Str (required)
type: Str (required) // One of Document.TYPE_CHOICES
category: Str (required) // One of Document.POLICY_CATEGORY_CHOICES
tags: Str (optional)
"description": Str (optional),
"negativity_score": Str (optional),
"negativity_reason": Str (optional),
"url": Str (optional), // Either this or file Required
"expire_at": Str (optional, ISO datetime)
returns:
if status=201:
{
"success": true,
"message": "Document uploaded successfully",
"data": {
"id": Int,
"name": Str,
"type": Str,
"category": Str,
"tags": Str,
"current_version": Str,
"versions": {
"id": Int,
"version": Str,
"url": Str|null,
"expire_at": Str|null
}
}
}
else if status=400:
{
"success": false,
"error": "Invalid data",
"message": {
"field_name": ["error_message"], ...
}
}
else if status=401:
{
"success": false,
"error": "Unauthorized",
"message": "You are not authorized to access this resource"
}
else if status=500:
{
"success": false,
"error": "Internal Server error",
"message": Str
}
16. Chatbot History (User)
URL: base_url/ai/ChatHistory/
Headers: Authorization: Bearer <access_token>
Accepted Request(s):
- GET
- POST
GET:
returns:
if status=200:
{
"success": true,
"data": {
"user_id": Int,
"remaining_tokens": Int,
"histories": [
{
"id": Int,
"prompt": Str,
"response": Str,
"created_at": "2025-09-10T09:00:00Z"
},...
]
}
}
else if status=401:
{
"success": false,
"error": "Unauthorized",
"message": "You are not authorized to access this resource"
}
else if status=500:
{
"success": false,
"error": "Internal Server Error",
"message": Str
}
POST:
takes:
{
"prompt": Str,
"response": Str,
"used_tokens": int
}
returns:
if status=201:
{
"success": true,
"message": "Chat history created successfully",
"data": {
"id": Int,
"user": Int,
"prompt": Str,
"response": Str,
"used_tokens": Int,
"created_at": "2025-09-10T09:00:00Z"
}
}
else if status=400:
{
"success": false,
"error": "Invalid data",
"details": Object
}
else if status=401:
{
"success": false,
"error": "Unauthorized",
"message": "You are not authorized to access this resource"
}
else if status=500:
{
"success": false,
"error": "Internal Server Error",
"message": Str
}
17. User Induction (User)
URL: base_url/induction/Induction/
Headers: Authorization: Bearer <access_token>
Accepted Request(s): GET
GET:
return:
if status=200:
{
"success": true,
"data": {
"overall_completion_rate": Float,
"inductions": {
"NotStarted": {
"id": Str,
"name": Str,
"description": Str | null,
"expires_at": Str | null,
"progress": Float
},
"InProgress": {
"id": Str,
"name": Str,
"description": Str | null,
"expires_at": Str | null,
"progress": Str
},
"Completed": {
"id": Str,
"name": Str,
"description": Str | null,
"expires_at": Str | null,
"progress": Str
}
}
}
}
else if status=400:
{
"success": false,
"error": "No role found",
"message": "User is not associated with any role"
}
else if status=401:
{
"success": false,
"error": "Unauthorized",
"message": "You are not authorized to access this resource"
}
else if status=500:
{
"success": false,
"error": "Internal Server error",
"message": Str
}
18. Emergency Access (User)
URL: base_url/api/EmergencyAccess/
Headers: Authorization: Bearer <access_token>
Accepted Request(s): GET
GET:
return:
if status=200:
{
"success": true,
"data": {
"emergency_services": Str | null,
"after_hours_support": Str | null,
"on_duty_manager": {
"name": Str | null,
"phone": Str | null
}
}
}
else if status=400:
{
"success": false,
"error": "No organization found",
"message": "User is not associated with any organization"
}
else if status=401:
{
"success": false,
"error": "Unauthorized",
"message": "You are not authorized to access this resource"
}
else if status=500:
{
"success": false,
"error": "Internal Server error",
"message": Str
}
19. User Surveys (User)
URL: base_url/surveys/AllUserSurvey/
Headers: Authorization: Bearer <access_token>
Accepted Request(s): GET
GET:
return:
if status=200:
{
"success": true,
"data": {
"not_responded": int
"surveys": {
"pending": [
{
"id": Int
"name": Str,
"details": Str | null,
"expires_at": Str | null,
"status": "Pending" / "Complete"
}, ...
],
"completed": [
{
"id": Int
"name": Str,
"details": Str | null,
"expires_at": Str | null,
"status": "Pending" / "Complete"
}, ...
]
}
}
}
else if status=400:
{
"success": false,
"error": "No role found",
"message": "User is not associated with any role"
}
else if status=401:
{
"success": false,
"error": "Unauthorized",
"message": "You are not authorized to access this resource"
}
else if status=500:
{
"success": false,
"error": "Internal Server error",
"message": Str
}
20. User Support Message (User)
URL: base_url/communication/SaveSeaportMassage/
Headers: Authorization: Bearer <access_token>
Accepted Request(s): GET, POST
GET:
return:
if status=200:
{
"success": true,
"topic_choices": [
{
"value": Str,
"name": Str
}, ...
]
}
else if status=401:
{
"success": false,
"error": "Unauthorized",
"message": "You are not authorized to access this resource"
}
else if status=500:
{
"success": false,
"error": "Failed to retrieve topic choices",
"details": "Error message"
}
POST:
take: {
"topic": Str, // Required
"message": Str // Required
}
return:
if status=201:
{
"success": true,
"message": "Support message submitted successfully"
}
else if status=400:
{
"success": false,
"error": "Invalid data",
"details": "Validation errors"
}
else if status=401:
{
"success": false,
"error": "Unauthorized",
"message": "You are not authorized to access this resource"
}
else if status=500:
{
"success": false,
"error": "Failed to submit support message",
"details": "Error message"
}
21. Document Management (User, Org Admin)
URL: base_url/documents/DocumentManage/<int:id>/
Headers: Authorization: Bearer <access_token>
Accepted Request(s): GET, PATCH, PUT, DELETE
GET:
query parameters:
version: Int (optional, specific version number to retrieve)
return:
if status=200:
{
"success": true,
"message": "Document retrieved successfully",
"data": {
"id": Int,
"name": Str,
"tags": Str,
"type": Str,
"category": Str,
"current_version": Int,
"updated_at": Str,
"version": {
"id": Int,
"version": Int,
"description": Str,
"negativity_score": Str,
"negativity_reason": Str,
"url": Str,
"expire_at": Str
},
// Additional fields for org_admin only:
"uploaded_by": Str, // "First Last - username"
"access_counter": Int,
"search_counter": Int,
"version": {
"uploaded_by": Str // "First Last - username"
}
}
}
else if status=400:
{
"success": false,
"error": "Valid version not found",
"message": "The document has no matching active version"
}
else if status=401:
{
"success": false,
"error": "Unauthorized",
"message": "You are not authorized to access this resource"
}
else if status=404:
{
"success": false,
"error": "Document not found",
"message": "The requested document not found"
}
else if status=500:
{
"success": false,
"error": "Failed to retrieve document",
"details": Str
}
PATCH:
take: {
"document": { // Optional
"name": Str, // Optional
"tags": Str, // Optional
"current_version": Int // Optional (version ID)
},
"version": { // Optional
"id": Int, // Required if version provided
"description": Str, // Optional
"state": Str, // Optional
"expire_at": Str // Optional
}
}
return:
if status=200:
{
"success": true,
"message": "Document updated successfully",
"data": {
"document": Object, // Updated document fields
"version": Object // Updated version fields
}
}
else if status=400:
{
"success": false,
"error": "Invalid current version" | "Invalid version",
"message": "The current version is not valid" | "The version is not valid"
}
else if status=401:
{
"success": false,
"error": "Unauthorized",
"message": "You are not authorized to access this resource"
}
else if status=404:
{
"success": false,
"error": "Document not found",
"message": "The requested document not found"
}
else if status=500:
{
"success": false,
"error": "Failed to update document",
"details": Str
}
PUT:
take: {
"tags": Str, // Optional
"description": Str, // Optional
"negativity_score": Str, // Optional
"negativity_reason": Str, // Optional
"url": Str, // Optional
"expire_at": Str // Optional
}
return:
if status=201:
{
"success": true,
"message": "New version created successfully",
"data": {
"document_id": Int,
"new_version_id": Int,
"version": Int
}
}
else if status=401:
{
"success": false,
"error": "Unauthorized",
"message": "You are not authorized to access this resource"
}
else if status=404:
{
"success": false,
"error": "Document not found",
"message": "The requested document not found"
}
else if status=500:
{
"success": false,
"error": "Failed to create document version",
"details": Str
}
DELETE:
takes:
{
"versions": [Int,...] (optional, specific version IDs to delete else full document will be deleted)
}
return:
if status=200:
{
"success": true,
"message": "Document deleted successfully" | "Version deleted successfully",
"data": {
"document_id": Int,
"deleted_version": Int // Only present when deleting specific version
}
}
else if status=400:
{
"success": false,
"error": "Invalid version",
"message": "The version is not valid"
}
else if status=401:
{
"success": false,
"error": "Unauthorized",
"message": "You are not authorized to access this resource"
}
else if status=404:
{
"success": false,
"error": "Document not found",
"message": "The requested document not found"
}
else if status=500:
{
"success": false,
"error": "Failed to delete document/version",
"details": Str
}
<----------------------- Organizational Admin ----------------------->
20.Org-Admin Dash (Admin)
URL: base_url/api/OrgDash/
Headers: Authorization: Bearer <access_token>
Accepted Request(s): GET
GET:
return:
if status=200:
{
"success": true,
"data": {
"user": {
"total": Integer, // Total users in organization
"active": Integer // Active users in organization
},
"current_month": String, // Current month abbreviation (e.g., "Sep")
"survey_engagement_rate": Float, // Percentage of survey responses (0-100)
"compliance_health": {
"total_compliance_health": Float,
"policy_health": Float,
"induction_completion": Float,
"policy_regulatory_alignment": Float
},
"indiction_completion_rate_monthly": {
// Monthly induction completion rates for last 6 months
// Keys are month abbreviations (e.g., "Apr", "May", "Jun", "Jul", "Aug", "Sep")
// Values are completion percentages (Float)
"Apr": 75.5,
"May": 82.3,
"Jun": 68.9,
"Jul": 91.2,
"Aug": 85.7,
"Sep": 78.4
},
"top_5_accessed_policy": {
// Policy categories with their access counts
// Keys are category names, values are access counts
"Safety Policy": 245,
"HR Policy": 189,
"IT Policy": 156,
"Finance Policy": 134,
"Compliance Policy": 98
},
"policy_health": {
"up_to_date": Integer, // Count of up-to-date policies
"expiring_soon": Integer, // Count of policies expiring within 30 days
"expired": Integer // Count of expired policies
},
"top_10_searched_documents": {
"Document name 1": Int,
"Document name 2": Int,.......
},
"announcements": {
"unseen_announcements_count": 1,
"announcements": [
{
"id": int,
"title": str,
"message": str,
"severity": str,
"created_at": "2025-09-30T04:27:34.266796Z" --> time date
}
]
}
}
}
else if status=400:
{
"success": false,
"error": "No organization found",
"message": "User is not associated with any organization"
}
else if status=401:
{
"success": false,
"error": "Unauthorized",
"message": "You are not authorized to access this resource"
}
else if status=500:
{
"success": false,
"error": "Internal Server error",
"message": Str
}
21. Get All Org Documents (Admin)
URL: base_url/documents/OrgDocuments/
Headers: Authorization: Bearer <access_token>
Accepted Request(s): GET
GET:
query parameters:
type: Str (optional, filter by document type)
category: Str (optional, filter by document category)
status: Str (optional, filter by document status)
state: Str (optional, filter by document state, defaults to "active")
keyword: Str (optional, search in name, details, keyword)
return:
if status=200:
{
"success": true,
"filters": {
"types": [
{
"name": Str,
"value": Str
}, ...
],
"categories": [
{
"name": Str,
"value": Str
}, ...
],
"states": [
{
"name": Str,
"value": Str
}, ...
],
"statuses": [
{
"name": Str,
"value": Str
}, ...
]
},
"documents": [
{
"id": Int,
"name": Str,
"type": Str,
"category": Str,
"state": Str,
"status": Str,
"version": Str,
"expire_at": Str | null
}, ...
]
}
else if status=400:
{
"success": false,
"error": "No organization found",
"message": "User is not associated with any organization"
}
else if status=401:
{
"success": false,
"error": "Unauthorized",
"message": "You are not authorized to access this resource"
}
else if status=500:
{
"success": false,
"error": "Internal Server error",
"message": Str
}
23. Upload Org Documents (Admin)
URL: base_url/documents/OrgDocumentUpload/
Headers: Authorization: Bearer <access_token>
Accepted Request(s): GET, POST
GET:
Returns:
{
"types":[
{"name": Str, "value": Str},
{"name": Str, "value": Str},
{"name": Str, "value": Str}...
],
"categories":[
{"name": Str, "value": Str},
{"name": Str, "value": Str},
{"name": Str, "value": Str}...
],
}
POST:
takes:{
"name": Str, // required, unique
"link": Str // required, unique
"details": Str, // optional, default "No Details"
"category": Str, // required, one of Document.POLICY_CATEGORY_CHOICES values
"type": Str, // required, one of Document.TYPE_CHOICES values
"keywords": Str, // optional, comma-separated tags
"expire_at": Str|null // optional, ISO 8601 datetime string or null
}
Response:
if status=201:
{
"success": true,
"message": "Document uploaded secsessfully"
}
else if status=400:
{
"success": false,
"error": "Validation Error",
"message": Str,
"fields": { ... } // field-specific errors
}
else if status=401:
{
"success": false,
"error": "Unauthorized",
"message": "You are not authorized to perform this action"
}
else if status=500:
{
"success": false,
"error": "Internal Server error",
"message": Str
}
33. Document Request Management (Org Admin)
URL: base_url/documents/DocumentRequest/
Headers: Authorization: Bearer <access_token>
Accepted Request(s): GET, PATCH
GET:
return:
if status=200:
{
"success": true,
"message": "Document requests retrieved successfully",
"data": {
"documents": [
{
"id": Int,
"name": Str,
"type": Str,
"category": Str,
"versions": [
{
"id": Int,
"version": Str,
"description": Str,
"negativity_score": Str,
"negativity_reason": Str,
"url": Str,
"expire_at": Str,
"uploaded_by": Str, // "First Last - username"
"created_at": Str,
"updated_at": Str
}, ...
]
}, ...
]
}
}
else if status=401:
{
"success": false,
"error": "Unauthorized",
"message": "You are not authorized to access this resource"
}
else if status=500:
{
"success": false,
"error": "Failed to retrieve document requests",
"details": Str,
"error_type": Str
}
PATCH:
take: {
"document_id": Int, // Required
"version_id": Int, // Required
"action": Str // Required ("publish")
}
return:
if status=200:
{
"success": true,
"message": "Published successfully. Awaiting approval.",
"data": {
"document_id": Int,
"version_id": Int
}
}
else if status=400:
{
"success": false,
"error": "Invalid Action" | "Missing Required Fields",
"message": "Only 'publish' action is supported." | "document_id, version_id, and action are required."
}
else if status=401:
{
"success": false,
"error": "Unauthorized",
"message": "You are not authorized to access this resource"
}
else if status=404:
{
"success": false,
"error": "Not Found",
"message": "The document version was not found or is not in draft state."
}
else if status=500:
{
"success": false,
"error": "Failed to update document request",
"details": Str,
"error_type": Str
}
34. Policy Request Management (Org Admin)
URL: base_url/documents/PolicyRequest/
Headers: Authorization: Bearer <access_token>
Accepted Request(s): GET, PATCH
GET:
return:
if status=200:
{
"success": true,
"message": "Policy requests retrieved successfully",
"data": {
"policy_requests": [
{
"document_id": Int,
"version_id": Int,
"name": Str,
"version": Str,
"description": Str,
"state": Str,
"negativity_score": Str,
"negativity_reason": Str,
"url": Str,
"uploaded_by": Str, // "First Last - email"
"expire_at": Str,
"created_at": Str,
"updated_at": Str
}, ...
]
}
}
else if status=401:
{
"success": false,
"error": "Unauthorized",
"message": "You are not authorized to access this resource"
}
else if status=500:
{
"success": false,
"error": "Policy request retrieval failed",
"details": Str
}
PATCH:
query parameters:
id: Int (required) // Policy request version ID
return:
if status=200:
{
"success": true,
"message": "Policy request updated successfully",
"data": {
"id": Int,
"name": Str,
"version": Str,
"description": Str,
"state": Str, // "active" for non-policy documents, "waiting_approval" for policy documents
"negativity_score": Str,
"negativity_reason": Str,
"url": Str
}
}
else if status=400:
{
"success": false,
"error": "Invalid request",
"message": "Policy request ID is required"
}
else if status=401:
{
"success": false,
"error": "Unauthorized",
"message": "You are not authorized to access this resource"
}
else if status=404:
{
"success": false,
"error": "Not Found",
"message": "Policy request not found or not in draft state"
}
else if status=500:
{
"success": false,
"error": "Policy request update failed",
"details": Str
}
24. Get All Organization Inductions (Admin)
URL: base_url/induction/OrgInduction/
Headers: Authorization: Bearer <access_token>
Method: GET
GET:
if (status=200):
returns: {
"success": true,
"total_flows": Int, // Total number of induction flows
"active_flows": Int, // Number of active flows (status="active")
"draft_flows": Int, // Number of draft flows (status="draft")
"inductions": [
{
"id": Int, // Induction module ID
"name": Str, // Flow name
"description": Str, // Description
"status": Str, // Status ("active", "draft", etc.)
"assigned_roles": [Str], // List of assigned role names
"step_count": Int, // Number of steps in the flow
"completion_percentage": Str // Completion percentage as string, e.g. "75.00"
},
...
]
}
Unauthorized Response (status=401):
{
"success": false,
"error": "Unauthorized",
"message": "You are not authorized to view induction flows"
}
Error Response (status=500):
{
"success": false,
"error": "Internal Server Error",
"message": Str
}
25. Induction Flow Builder (Admin)
URL: base_url/induction/CreateInduction/
Headers: Authorization: Bearer <access_token>
Methods: GET, POST
GET:
- Returns the available roles and induction status options for the organization.
- Response (status=200):
{
"success": true,
"roles": [
{
"name": Str, // Role name
"value": Int // Role ID
},
...
],
"induction_status": [
{
"name": Str, // Status display name
"value": Str // Status value (e.g., "active", "draft")
},
...
]
}
- Error Response (status=500):
{
"success": false,
"error": "Internal Server Error",
"message": Str
}
POST:
- Creates a new induction flow for the organization.
- Request body:
{
"name": Str,
"description": Str, // Induction description
"expires_at": DateTimeField, // Induction expiry date (optional)
"status": Str, // Induction status (e.g., "active", "draft")
"roles": [Int, ...], // List of role IDs to assign induction to
"steps": [
{
"order_index": Int, // Step order (e.g., 1, 2, ...)
"title": Str, // Step title
"description": Str, // Step description
"link": Str, // Resource link (optional)
"image_file": Str, // Image file (optional)
"document_id": Int // Document assigned to the step (optional)
},
...
]
}
- Success Response (status=201):
{
"success": true,
"message": "Induction created successfully"
}
- Validation Error Response (status=400):
{
"success": false,
"error": "Invalid data",
"details": { ... } // Validation errors
}
- Role Not Found Error (status=400):
{
"success": false,
"error": "Role not found",
"details": "Role not found"
}
- Error Response (status=500):
{
"success": false,
"error": "Internal Server Error",
"message": Str
}
26. Get All Organization Surveys (Admin)
URL: base_url/surveys/OrgSurveys/
Headers: Authorization: Bearer <access_token>
Method: GET
GET:
if (status=200):
returns: {
"success": true,
"total_surveys": Int,
"response_rate": float,
"total_response": Int,
"surveys": [
{
"id": Int,
"name": Str,
"details": Str,
"status": Str,
"types": Str,
"total_assign": int,
"total_response": int,
"response_rate": float,
},
...
]
}
Unauthorized Response (status=401):
{
"success": false,
"error": "Unauthorized",
"message": "You are not authorized to view organization surveys"
}
Error Response (status=500):
{
"success": false,
"error": "Internal Server Error",
"message": Str
}
27. New Survey Creation (Admin)
URL: base_url/surveys/CreateSurvey/
Headers: Authorization: Bearer <access_token>
Methods: GET, POST
GET:
- Returns available survey config for the organization.
- Response (status=200):
{
"success": true,
"survey_types": [
{
"name": Str,
"value": Str
},
...
],
"survey_status": [
{
"name": Str,
"value": Str
},
...
],
"question_type": [
{
"name": Str, // Status display name
"value": Str // Status value (e.g., "active", "draft")
},
...
],
"survey_status": [
{ "name": Str, "value": Str }, ...
],
"question_type": [
{ "name": Str, "value": Str }, ...
]
}
- Error Response (status=500):
{
"success": false,
"error": "Internal Server Error",
"message": Str
}
POST:
- Creates a new survey with nested questions (and options for choice questions).
- Request body:
{
"name": Str,
"details": Str,
"type": Str, // One of Survey.TYPE_CHOICES
"status": Str, // One of Survey.STATUS_CHOICES
"expires_at": DateTime | null,
"questions": [
{
"order_index": Int,
"question_text": Str,
"type": Str, // One of QUESTION_TYPE_CHOICES
"options": [ // Required only for SingleChoice/MultiChoice
{ "order_index": Int, "option_text": Str },
...
]
},
...
]
}
- Success Response (status=201):
{
"success": true,
"message": "Survey created successfully"
}
- Validation Error Response (status=400):
{
"success": false,
"error": "Invalid data",
"details": { ... } // Validation errors
}
- Error Response (status=500):
{
"success": false,
"error": "Internal Server Error",
"message": Str
}
28. User Management (Admin)
URL: base_url/core/UserManagement/
Headers: Authorization: Bearer <access_token>
Methods: GET, POST
GET:
query parameters:
role = Str // Optional - filter by role name
is_active = Bool // Optional - filter by active status
keyword = Str // Optional - search in name/email
returns:
if status=200:
{
"success": true,
"filters": {
"roles": [
{
"name": Str,
"value": Str
}, ...
],
"is_active": [
{
"name": "Active",
"value": true
},
{
"name": "Inactive",
"value": false
}
]
},
"total_users": Int,
"active_users": Int,
"users": [
{
"id": Int,
"first_name": Str,
"last_name": Str,
"email": Str,
"role_name": Str,
"last_login": Str,
"is_active": Bool
}, ...
]
}
else if status=400:
{
"success": false,
"error": "No organization found",
"message": "User is not associated with any organization"
}
else if status=401:
{
"success": false,
"error": "Unauthorized",
"message": "You are not authorized to access this resource"
}
else if status=500:
{
"success": false,
"error": "Internal Server error",
"message": Str
}
POST:
take: {
"first_name": Str,
"last_name": Str,
"email": Str,
"role": Int // Role ID
}
return:
if status=201:
{
"success": true,
"message": "User created successfully",
"email": Str,
"password": Str
}
else if status=400:
{
"success": false,
"error": "Validation failed",
"details": {
"field_name": ["error_message"]
}
}
else if status=500:
{
"success": false,
"error": "Internal Server error",
"message": Str
}
29. Role Management (Admin)
URL: base_url/core/RoleManagement/
Headers: Authorization: Bearer <access_token>
Methods: GET, POST
GET:
return:
if status=200:
{
"success": true,
"total_roles": Int,
"roles": [
{
"id": Int,
"name": Str,
"description": Str,
"assigned_users": Int
}, ...
]
}
else if status=500:
{
"success": false,
"error": "Internal Server error",
"message": Str
}
POST:
take: {
"name": Str,
"description": Str
}
return:
if status=201:
{
"success": true,
"message": "Role created successfully",
"name": Str
}
else if status=400:
{
"success": false,
"error": "Validation failed",
"details": {
"field_name": ["error_message"]
}
}
else if status=500:
{
"success": false,
"error": "Internal Server error",
"message": Str
}
30. Assign Role (Admin)
URL: base_url/core/AssignRole/
Headers: Authorization: Bearer <access_token>
Methods: POST
POST:
take: {
"users": [Int, Int, ...], // Array of user IDs
"role": Int // Role ID
}
return:
if status=200:
{
"success": true,
"message": "Roles assigned successfully",
"role": {
"id": Int,
"name": Str
},
"assigned_users": [
{
"id": Int,
"first_name": Str,
"last_name": Str,
"email": Str
}, ...
]
}
else if status=400:
{
"success": false,
"error": "Invalid Request",
"message": "'users' and 'role' are required."
}
else if status=404:
{
"success": false,
"error": "Not Found",
"message": "No valid users found in your organization."
}
else if status=500:
{
"success": false,
"error": "Internal Server error",
"message": Str
}
31. Organization Profile (Admin)
URL: base_url/organizations/OrgProfile/
Headers: Authorization: Bearer <access_token>
Methods: GET, PATCH
GET:
return:
if status=200:
{
"success": true,
"data": {
"name": Str,
"type": Str,
"contact_name": Str,
"contact_email": Str,
"contact_phone": Str,
"time_zone": Str,
"location": Str,
"language": Str,
"logo": Str,
"primary_color": Str,
"secondary_color": Str,
"policy_expiry_alerts": Bool,
"new_compliance_alerts": Bool,
"new_survey_responses": Bool,
"user_onboarding_progress": Bool,
"policy_updates_and_new_documents": Bool,
"training_reminders": Bool
}
}
else if status=500:
{
"success": false,
"error": "Internal Server Error",
"message": Str
}
PATCH:
take: {
"name": Str,
"type": Str,
"contact_name": Str,
"contact_email": Str,
"contact_phone": Str,
"time_zone": Str,
"location": Str,
"language": Str,
"logo": Str,
"primary_color": Str,
"secondary_color": Str,
"policy_expiry_alerts": Bool,
"new_compliance_alerts": Bool,
"new_survey_responses": Bool,
"user_onboarding_progress": Bool,
"policy_updates_and_new_documents": Bool,
"training_reminders": Bool
}
return:
if status=200:
{
"success": true,
"message": "Organization profile updated successfully"
}
else if status=400:
{
"success": false,
"error": "Validation failed",
"details": { /* validation errors object */ }
}
else if status=500:
{
"success": false,
"error": "Internal Server Error",
"message": Str
}
32. Organization Logs (Admin)
URL: base_url/api/OrganizationLogs/
Headers: Authorization: Bearer <access_token>
Methods: GET
GET:
query:
from: Str (DateTime ISO format)
to: Str (DateTime ISO format)
action: Str (optional) // Log action type (e.g., "CREATE", "ERROR")
sys_only: Bool (optional) // If true, only system logs
keyword: Str (optional) // Search in message, actor name, email, related fields, or IP address
return:
if status=200:
{
"success": true,
"data": [
{
"id": Int,
"date_time": Str,
"action": Str,
"actor_name": Str,
"email": Str,
"message": Str,
"ip_address": Str
},
// ...
]
}
else if status=500:
{
"success": false,
"error": Str
}
33. Admin Compliance (Admin)
URL: base_url/api/AdminCompliance/
Headers: Authorization: Bearer <access_token>
Methods: GET
GET:
return:
if status=200:
{
"success": true,
"message": "Admin compliance retrieved successfully",
"data": {
"induction_completion_rate": Float, // Overall induction completion percentage
"documents_health": {
"by_category": {
"category_name": {
"up_to_date": Int, // Count of up-to-date documents
"expiring_soon": Int, // Count of documents expiring within 30 days
"expired": Int // Count of expired documents
}, ...
},
"average": {
"up_to_date": Float, // Average up-to-date count across categories
"expiring_soon": Float, // Average expiring soon count across categories
"expired": Float // Average expired count across categories
}
},
"policy_regulatory_alignment": {
"by_category": {
"category_name": Float, // Regulatory alignment score (0-100)
...
},
"average": Float // Average regulatory alignment across all categories
},
"unresolved_messages": Int, // Count of unresolved seaport messages
"user_seaport_messages": [
{
"id": Int,
"topic": Str, // Message topic (technical_issue, policy_clarification, etc.)
"message": Str, // Message content
"created_at": Str, // ISO datetime
"responded_by": Int|null, // User ID who responded (null if unresolved)
"responded_at": Str|null // Response datetime (null if unresolved)
}, ...
]
}
}
else if status=401:
{
"success": false,
"error": "Unauthorized",
"message": "You are not authorized to access this resource"
}
else if status=500:
{
"success": false,
"error": "Admin compliance retrieval failed",
"details": Str
}
<--------------------- Supper Admin ---------------->
34. Get All Meetings (Super admin)
URL: base_url/meetings/AllMeetings/
Headers: Authorization: Bearer <access_token>
Accepted Request(s): GET, POST, DELETE
GET:
query parameters:
from: Str (optional, filter by start date)
to: Str (optional, filter by end date)
goal: Str (optional, filter by goal)
status: Str (optional, filter by status)
assigned_to: Int (optional, filter by assigned user)
keyword: Str (optional, search in title, email, phone)
return:
if status=200:
{
"success": true,
"message": "Meetings fetched successfully",
"data": {
"filters": {
"goal": [
{
"name": Str,
"value": Str
},.....
],
"status": [
{
"name": Str,
"value": Str
},.....
]
},
"meetings": [
{
"id": Int,
"title": Str,
"goal": Str,
"start_time": Str,
"end_time": Str,
"status": Str
}, ...
]
}
}
else if status=401:
{
"success": false,
"error": "Unauthorized",
"message": "You are not authorized to access this resource"
}
else if status=500:
{
"success": false,
"error": "Failed to fetch meetings",
"details": "Error message"
}
POST:
take: {
"title": Str, // Optional
"description": Str, // Optional
"goal": Str, // Optional
"status": Str, // Optional
"requester_name": Str, // Optional
"phone": Str, // Optional
"email": Str, // Optional
"start_time": Str, // Optional
"end_time": Str, // Optional
"time_zone": Str, // Optional
"assigned_to": Int, // Optional
"meeting_link": Str, // Optional
}
return:
if status=200:
{
"success": true,
"message": "Meeting created successfully",
"data": {
"id": Int,
"title": Str,
"description": Str,
"goal": Str,
"status": Str,
"requester_name": Str,
"phone": Str,
"email": Str,
"start_time": Str,
"end_time": Str,
"time_zone": Str,
"assigned_to": Int,
"meeting_link": Str,
"created_by": Int,
"organization": Int,
"created_at": Str,
"updated_at": Str
}
}
else if status=400:
{
"success": false,
"error": "Invalid data",
"details": "Validation errors"
}
else if status=500:
{
"success": false,
"error": "Failed to create meeting",
"details": "Error message"
}
DELETE:
take: {
"ids": [Int, Int, ...]
}
return:
if status=200:
{
"success": true,
"message": "Meeting deleted successfully",
"data": "[Int, Int, ...] deleted"
}
else if status=400:
{
"success": false,
"error": "Invalid data",
"details": "Provide a non-empty list of ids"
}
else if status=401:
{
"success": false,
"error": "Unauthorized",
"message": "You are not authorized to access this resource"
}
else if status=500:
{
"success": false,
"error": "Failed to delete meeting",
"details": "Error message"
}
35. Meeting --> Single (Super admin)
URL: base_url/meetings/Meeting/<int:id>
Headers: Authorization: Bearer <access_token>
Accepted Request(s): GET, PATCH
GET:
return:
if status=200:
{
"success": true,
"message": "Meeting fetched successfully",
"data": {
"title": Str,
"description": Str,
"status": Str,
"goal": Str,
"requester_name": Str,
"phone": Str,
"email": Str,
"start_time": Str,
"end_time": Str,
"time_zone": Str,
"assigned_to": {
"id": Int,
"name": Str,
"email": Str
} or null,
"meeting_link": Str,
"created_at": Str,
"updated_at": Str,
"created_by": {
"id": Int,
"name": Str,
"email": Str
} or null,
"organization": {
"id": Int,
"name": Str,
"email": Str
} or null
}
}
else if status=401:
{
"success": false,
"error": "Unauthorized",
"message": "You are not authorized to access this resource"
}
else if status=404:
{
"success": false,
"error": "Meeting not found",
"details": "Meeting with id {id} does not exist"
}
else if status=500:
{
"success": false,
"error": "Failed to fetch meeting",
"details": "Error message"
}
PATCH:
take: {
"start_time": Str, // Optional
"status": Str, // Optional
"assigned_to": Int, // Optional
"meeting_link": Str // Optional
}
return:
if status=200:
{
"success": true,
"message": "Meeting updated successfully",
"data": {
"id": Int,
"title": Str,
"description": Str,
"status": Str,
"goal": Str,
"requester_name": Str,
"phone": Str,
"email": Str,
"start_time": Str,
"end_time": Str,
"time_zone": Str,
"assigned_to": Int,
"meeting_link": Str,
"created_at": Str,
"created_by": Int,
"organization": Int,
"updated_at": Str
}
}
else if status=400:
{
"success": false,
"error": "Invalid data",
"details": "Validation errors"
}
else if status=401:
{
"success": false,
"error": "Unauthorized",
"message": "You are not authorized to access this resource"
}
else if status=404:
{
"success": false,
"error": "Meeting not found",
"details": "Meeting with id {id} does not exist"
}
else if status=500:
{
"success": false,
"error": "Failed to update meeting",
"details": "Error message"
}
// ========================================
// MISSING ENDPOINTS - ADDED FROM VIEWS.PY ANALYSIS
// ========================================
25. User Registration
URL: base_url/core/register/
Method: POST
Request: {
"username": "abdul",
"email": "abdul@softvence.com",
"password": "password123",
"first_name": "Abdul",
"last_name": "Hafeez"
}
Response: {
"success": true,
"message": "User registered successfully",
"user_id": Int
}
26. Change Password
URL: base_url/core/ChangePassword/
Headers: Authorization: Bearer <access_token>
Method: POST
Request: {
"old_password": "oldpass",
"new_password": "newpass"
}
Response: {
"success": true,
"message": "Password changed successfully"
}
27. Document Version Download
URL: base_url/documents/OrgDocuments/<int:doc_id>/
Headers: Authorization: Bearer <access_token>
Method: GET
Response: File download (PDF/DOC)
28. Document Version Download (Specific Version)
URL: base_url/documents/OrgDocuments/<int:doc_id>/<int:version_id>/
Headers: Authorization: Bearer <access_token>
Method: GET
Response: File download (PDF/DOC)
29. Document Category and Type Choices
URL: base_url/documents/categoryType/
Method: GET
Response: {
"categories": [...],
"types": [...]
}
30. Most Used Document
URL: base_url/documents/most-used-document/
Headers: Authorization: Bearer <access_token>
Method: GET
Response: {
"documents": [...]
}
31. Document Management (Single Document)
URL: base_url/documents/DocumentManage/<int:id>/
Headers: Authorization: Bearer <access_token>
Method: GET/PATCH/PUT/DELETE
GET Response: Document details
PATCH/PUT Request: Document updates
DELETE Response: {"success": true, "message": "Document deleted"}
32. Document Request Management
URL: base_url/documents/DocumentRequest/
Headers: Authorization: Bearer <access_token>
Method: GET/PATCH
GET Response: Document requests list
PATCH Request: Request updates
33. Policy Statistics
URL: base_url/documents/PolicyStats/
Headers: Authorization: Bearer <access_token>
Method: GET
Response: {
"total_policies": Int,
"read_policies": Int,
"unread_policies": Int
}
34. Document Ratings
URL: base_url/documents/Ratings/
Headers: Authorization: Bearer <access_token>
Method: GET/POST/PATCH/DELETE
POST Request: {"document_id": Int, "rating": Int, "comment": "..."}
Response: {"success": true, "rating_id": Int}
35. Version Management
URL: base_url/documents/Version/
Headers: Authorization: Bearer <access_token>
Method: GET/DELETE/PATCH
GET Response: Document versions list
DELETE/PATCH: Version management
36. Organization Documents (List/Create)
URL: base_url/documents/OrgDocuments/
Headers: Authorization: Bearer <access_token>
Method: GET/POST
GET Response: Organization documents list
POST Request: Document creation data
37. JWT Token Obtain
URL: base_url/api/token/
Method: POST
Request: {"username": "user", "password": "pass"}
Response: {
"access": "jwt_access_token",
"refresh": "jwt_refresh_token"
}
38. JWT Token Refresh
URL: base_url/api/getNewAccessToken/
Method: POST
Request: {"refresh": "jwt_refresh_token"}
Response: {
"access": "new_jwt_access_token"
}
39. User Support Message
URL: base_url/communication/SaveSeaportMassage/
Headers: Authorization: Bearer <access_token>
Method: GET/POST
GET Response: Topic choices
POST Request: {"topic": "topic_id", "message": "..."}
40. Most Token Used
URL: base_url/ai/most-token-used/
Headers: Authorization: Bearer <access_token>
Method: GET
Response: Most used token types
41. Token Used (List/Record)
URL: base_url/ai/TokenCount/
Headers: Authorization: Bearer <access_token>
Method: GET/POST
GET Response: Token types list
POST Request: Token usage data
42. User Chat History
URL: base_url/ai/ChatHistory/
Headers: Authorization: Bearer <access_token>
Method: GET
Response: {
"chat_history": [...],
"remaining_tokens": Int
}
43. Key Feature Management
URL: base_url/subscriptions/feature/
Headers: Authorization: Bearer <access_token>
Method: GET/POST
GET Response: Key features list
POST Request: Feature creation data
44. Key Feature Detail
URL: base_url/subscriptions/feature/<int:pk>/
Headers: Authorization: Bearer <access_token>
Method: GET/PUT/DELETE
GET Response: Feature details
PUT Request: Feature updates
DELETE Response: {"success": true}
45. Plan Detail
URL: base_url/subscriptions/plan/<int:pk>/
Headers: Authorization: Bearer <access_token>
Method: GET/DELETE/PUT
GET Response: Plan details
PUT Request: Plan updates
DELETE Response: {"success": true}
46. Plan Management (CRUD)
URL: base_url/subscriptions/plan/
Headers: Authorization: Bearer <access_token>
Method: GET/POST
GET Response: Plans list
POST Request: Plan creation data
47. Cancel Subscription
URL: base_url/subscriptions/cancel/
Headers: Authorization: Bearer <access_token>
Method: POST
Request: {"subscription_id": Int}
Response: {"success": true, "message": "Subscription cancelled"}
48. Subscription Management
URL: base_url/subscriptions/subscription/
Headers: Authorization: Bearer <access_token>
Method: GET/POST
GET Response: Subscriptions list
POST Request: Subscription creation data
49. Subscription Update
URL: base_url/subscriptions/subscription/<int:pk>/update/
Headers: Authorization: Bearer <access_token>
Method: PUT
Request: Subscription updates
Response: Updated subscription data
50. Plans API View (Super Admin)
URL: base_url/subscriptions/plans-api-view/
Headers: Authorization: Bearer <access_token>
Method: GET/POST
GET Response: All plans
POST Request: Plan creation
51. Plans API View Detail (Super Admin)
URL: base_url/subscriptions/plans-api-view/<int:pk>/
Headers: Authorization: Bearer <access_token>
Method: GET/PUT/DELETE
GET Response: Plan details
PUT Request: Plan updates
DELETE Response: {"success": true}
52. Promo Codes Management
URL: base_url/subscriptions/promocodes/
Headers: Authorization: Bearer <access_token>
Method: GET/POST
GET Response: Promo codes list
POST Request: Promo code creation
53. Promo Code Detail
URL: base_url/subscriptions/promocodes/<int:pk>/
Headers: Authorization: Bearer <access_token>
Method: GET/PUT/DELETE
GET Response: Promo code details
PUT Request: Promo code updates
DELETE Response: {"success": true}
54. Manage Survey (Admin)
URL: base_url/surveys/ManageSurvey/<int:id>/
Headers: Authorization: Bearer <access_token>
Method: GET
Response: Survey management details
55. Payment Success
URL: base_url/payment/success/
Method: GET
Response: Payment success page
56. Payment View
URL: base_url/payment/
Method: GET/POST
Response: Payment interface
57. Stripe Webhook
URL: base_url/payment/StripeResponse/
Method: POST
Request: Stripe webhook data
Response: {"success": true}
58. Organization List (Super Admin)
URL: base_url/organizations/
Headers: Authorization: Bearer <access_token>
Method: GET
Response: Organizations list
59. Organization Update (Super Admin)
URL: base_url/organizations/update/<int:pk>/
Headers: Authorization: Bearer <access_token>
Method: PUT
Request: Organization updates
Response: Updated organization
60. Organization Delete (Super Admin)
URL: base_url/organizations/delete/<int:pk>/
Headers: Authorization: Bearer <access_token>
Method: DELETE
Response: {"success": true}
61. Organization Dashboard (Super Admin)
URL: base_url/organizations/organization-dashboard/
Headers: Authorization: Bearer <access_token>
Method: GET
Response: Organization statistics
62. Organizations Overview (Super Admin)
URL: base_url/organizations/organizations-overview/
Headers: Authorization: Bearer <access_token>
Method: GET
Response: Organizations overview data
63. Organization Detail (Super Admin)
URL: base_url/organizations/organizations-overview/<int:pk>/
Headers: Authorization: Bearer <access_token>
Method: GET
Response: Specific organization details
64. Log Dashboard
URL: base_url/logs/dashboard/
Headers: Authorization: Bearer <access_token>
Method: GET
Response: Log dashboard HTML
65. Log API
URL: base_url/logs/api/logs/
Headers: Authorization: Bearer <access_token>
Method: GET
Response: Logs list with filtering
66. Log Statistics
URL: base_url/logs/api/stats/
Headers: Authorization: Bearer <access_token>
Method: GET
Response: Log statistics
67. Organization Logs
URL: base_url/logs/OrganizationLogs/
Headers: Authorization: Bearer <access_token>
Method: GET
Response: Organization-specific logs
68. Log Management
URL: base_url/logs/OrganizationLogs/<int:id>/
Headers: Authorization: Bearer <access_token>
Method: GET
Response: Specific log entry details
69. Platform Notifications (Super Admin)
URL: base_url/notifications/
Headers: Authorization: Bearer <access_token>
Method: GET/POST
GET Response: Notifications list
POST Request: Notification creation
70. Platform Notification Detail (Super Admin)
URL: base_url/notifications/<int:pk>/
Headers: Authorization: Bearer <access_token>
Method: GET/PUT/PATCH/DELETE
GET Response: Notification details
PUT/PATCH Request: Notification updates
DELETE Response: {"success": true}
71. Maintenance Announcements (Super Admin)
URL: base_url/notifications/maintenance/
Headers: Authorization: Bearer <access_token>
Method: GET/POST
GET Response: Maintenance announcements list
POST Request: Maintenance announcement creation
72. Maintenance Announcement Detail (Super Admin)
URL: base_url/notifications/maintenance/<int:pk>/
Headers: Authorization: Bearer <access_token>
Method: GET/PUT/PATCH/DELETE
GET Response: Maintenance announcement details
PUT/PATCH Request: Maintenance announcement updates
DELETE Response: {"success": true}
73. Forget Password (Any)
URL: base_url/core/ForgetPassword/
Method: POST
Request: {
"email": "user@example.com",
"otp": "123456",
"new_password": "newpassword123"
}
Response: {
"success": true,
"message": "Password changed successfully"
}
74. Role-User Assignment (Admin and User)
URL: base_url/core/RoleUserAssignment/
Headers: Authorization: Bearer <access_token>
Method: PATCH
Request: {
"roles": [Int, Int, ...], // Optional - Array of role IDs
"users": [Int, Int, ...], // Optional - Array of user IDs
"inductions": [Int, Int, ...], // Optional - Array of induction IDs
"surveys": [Int, Int, ...], // Optional - Array of survey IDs
"permissions": [Int, Int, ...] // Optional - Array of permission IDs
}
Response: {
"success": true,
"message": "Assignment successful"
}
Error Responses:
- 400: "Users not found" | "Role not found" | "Only one role can be assigned to users" | "Permissions not found or not accessible" | "What to assign to users?" | "What to assign to roles?" | "Missing assignment target"
- 401: "Unauthorized"
- 500: "Role assignment failed"
Note: This endpoint supports multiple assignment scenarios:
1. Assign users to a single role
2. Assign permissions to users
3. Assign inductions to roles
4. Assign surveys to roles
5. Assign permissions to roles
// ========================================
// END OF MISSING ENDPOINTS
// ========================================