You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

9941 lines
252 KiB

openapi: 3.0.3
info:
title: API سامانه تعاملات بین‌الملل
version: 2.0.0
description: مستندات نقاط پایانی سامانه تعاملات بین‌الملل آستان قدس رضوی (فاز دوم)
paths:
/api/v1/account/admin/directory-users/:
get:
operationId: v1_account_admin_directory_users_list
description: |-
Separate, dedicated endpoint for accounts/users list page.
Filters users who have an email, are not deleted (deleted_at is null).
parameters:
- name: page
required: false
in: query
description: A page number within the paginated result set.
schema:
type: integer
- name: page_size
required: false
in: query
description: Number of results to return per page.
schema:
type: integer
tags:
- v1
security:
- tokenAuth: []
- jwtAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/PaginatedAdminUserList'
description: ''
post:
operationId: v1_account_admin_directory_users_create
description: |-
Separate, dedicated endpoint for accounts/users list page.
Filters users who have an email, are not deleted (deleted_at is null).
tags:
- v1
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/AdminUserRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/AdminUserRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/AdminUserRequest'
required: true
security:
- tokenAuth: []
- jwtAuth: []
responses:
'201':
content:
application/json:
schema:
$ref: '#/components/schemas/AdminUser'
description: ''
/api/v1/account/admin/directory-users/{id}/:
get:
operationId: v1_account_admin_directory_users_retrieve
description: |-
Separate, dedicated endpoint for accounts/users list page.
Filters users who have an email, are not deleted (deleted_at is null).
parameters:
- in: path
name: id
schema:
type: integer
description: A unique integer value identifying this User.
required: true
tags:
- v1
security:
- tokenAuth: []
- jwtAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/AdminUser'
description: ''
put:
operationId: v1_account_admin_directory_users_update
description: |-
Separate, dedicated endpoint for accounts/users list page.
Filters users who have an email, are not deleted (deleted_at is null).
parameters:
- in: path
name: id
schema:
type: integer
description: A unique integer value identifying this User.
required: true
tags:
- v1
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/AdminUserRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/AdminUserRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/AdminUserRequest'
required: true
security:
- tokenAuth: []
- jwtAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/AdminUser'
description: ''
patch:
operationId: v1_account_admin_directory_users_partial_update
description: |-
Separate, dedicated endpoint for accounts/users list page.
Filters users who have an email, are not deleted (deleted_at is null).
parameters:
- in: path
name: id
schema:
type: integer
description: A unique integer value identifying this User.
required: true
tags:
- v1
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/PatchedAdminUserRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/PatchedAdminUserRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/PatchedAdminUserRequest'
security:
- tokenAuth: []
- jwtAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/AdminUser'
description: ''
delete:
operationId: v1_account_admin_directory_users_destroy
description: |-
Separate, dedicated endpoint for accounts/users list page.
Filters users who have an email, are not deleted (deleted_at is null).
parameters:
- in: path
name: id
schema:
type: integer
description: A unique integer value identifying this User.
required: true
tags:
- v1
security:
- tokenAuth: []
- jwtAuth: []
responses:
'204':
description: No response body
/api/v1/account/admin/directory-users/export_excel/:
get:
operationId: v1_account_admin_directory_users_export_excel_retrieve
description: |-
Export users to an Excel (.xlsx) file.
Accepts user_ids in POST body for selective bulk export,
or uses current queryset filters if no specific IDs are provided.
tags:
- v1
security:
- tokenAuth: []
- jwtAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/AdminUser'
description: ''
post:
operationId: v1_account_admin_directory_users_export_excel_create
description: |-
Export users to an Excel (.xlsx) file.
Accepts user_ids in POST body for selective bulk export,
or uses current queryset filters if no specific IDs are provided.
tags:
- v1
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/AdminUserRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/AdminUserRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/AdminUserRequest'
required: true
security:
- tokenAuth: []
- jwtAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/AdminUser'
description: ''
/api/v1/account/admin/login/:
post:
operationId: v1_account_admin_login_create
tags:
- v1
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/UserLoginRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/UserLoginRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/UserLoginRequest'
required: true
security:
- jwtAuth: []
- {}
responses:
'201':
content:
application/json:
schema:
$ref: '#/components/schemas/UserLogin'
description: ''
/api/v1/account/admin/notification-templates/:
get:
operationId: v1_account_admin_notification_templates_list
parameters:
- name: page
required: false
in: query
description: A page number within the paginated result set.
schema:
type: integer
- name: page_size
required: false
in: query
description: Number of results to return per page.
schema:
type: integer
tags:
- v1
security:
- tokenAuth: []
- jwtAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/PaginatedNotificationTemplateList'
description: ''
post:
operationId: v1_account_admin_notification_templates_create
tags:
- v1
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/NotificationTemplateRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/NotificationTemplateRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/NotificationTemplateRequest'
required: true
security:
- tokenAuth: []
- jwtAuth: []
responses:
'201':
content:
application/json:
schema:
$ref: '#/components/schemas/NotificationTemplate'
description: ''
/api/v1/account/admin/notification-templates/{id}/:
get:
operationId: v1_account_admin_notification_templates_retrieve
parameters:
- in: path
name: id
schema:
type: integer
description: A unique integer value identifying this Notification Template.
required: true
tags:
- v1
security:
- tokenAuth: []
- jwtAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/NotificationTemplate'
description: ''
put:
operationId: v1_account_admin_notification_templates_update
parameters:
- in: path
name: id
schema:
type: integer
description: A unique integer value identifying this Notification Template.
required: true
tags:
- v1
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/NotificationTemplateRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/NotificationTemplateRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/NotificationTemplateRequest'
required: true
security:
- tokenAuth: []
- jwtAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/NotificationTemplate'
description: ''
patch:
operationId: v1_account_admin_notification_templates_partial_update
parameters:
- in: path
name: id
schema:
type: integer
description: A unique integer value identifying this Notification Template.
required: true
tags:
- v1
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/PatchedNotificationTemplateRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/PatchedNotificationTemplateRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/PatchedNotificationTemplateRequest'
security:
- tokenAuth: []
- jwtAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/NotificationTemplate'
description: ''
delete:
operationId: v1_account_admin_notification_templates_destroy
parameters:
- in: path
name: id
schema:
type: integer
description: A unique integer value identifying this Notification Template.
required: true
tags:
- v1
security:
- tokenAuth: []
- jwtAuth: []
responses:
'204':
description: No response body
/api/v1/account/admin/notifications/:
get:
operationId: v1_account_admin_notifications_list
parameters:
- name: page
required: false
in: query
description: A page number within the paginated result set.
schema:
type: integer
- name: page_size
required: false
in: query
description: Number of results to return per page.
schema:
type: integer
tags:
- v1
security:
- tokenAuth: []
- jwtAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/PaginatedAdminNotificationList'
description: ''
post:
operationId: v1_account_admin_notifications_create
tags:
- v1
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/AdminNotificationRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/AdminNotificationRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/AdminNotificationRequest'
required: true
security:
- tokenAuth: []
- jwtAuth: []
responses:
'201':
content:
application/json:
schema:
$ref: '#/components/schemas/AdminNotification'
description: ''
/api/v1/account/admin/notifications/{id}/:
get:
operationId: v1_account_admin_notifications_retrieve
parameters:
- in: path
name: id
schema:
type: integer
description: A unique integer value identifying this Notification.
required: true
tags:
- v1
security:
- tokenAuth: []
- jwtAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/AdminNotification'
description: ''
put:
operationId: v1_account_admin_notifications_update
parameters:
- in: path
name: id
schema:
type: integer
description: A unique integer value identifying this Notification.
required: true
tags:
- v1
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/AdminNotificationRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/AdminNotificationRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/AdminNotificationRequest'
required: true
security:
- tokenAuth: []
- jwtAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/AdminNotification'
description: ''
patch:
operationId: v1_account_admin_notifications_partial_update
parameters:
- in: path
name: id
schema:
type: integer
description: A unique integer value identifying this Notification.
required: true
tags:
- v1
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/PatchedAdminNotificationRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/PatchedAdminNotificationRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/PatchedAdminNotificationRequest'
security:
- tokenAuth: []
- jwtAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/AdminNotification'
description: ''
delete:
operationId: v1_account_admin_notifications_destroy
parameters:
- in: path
name: id
schema:
type: integer
description: A unique integer value identifying this Notification.
required: true
tags:
- v1
security:
- tokenAuth: []
- jwtAuth: []
responses:
'204':
description: No response body
/api/v1/account/admin/users/:
get:
operationId: v1_account_admin_users_list
description: |-
Admin-only endpoint for full CRUD operations on Users.
Includes searching, filtering, and pagination.
parameters:
- name: page
required: false
in: query
description: A page number within the paginated result set.
schema:
type: integer
- name: page_size
required: false
in: query
description: Number of results to return per page.
schema:
type: integer
tags:
- v1
security:
- tokenAuth: []
- jwtAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/PaginatedAdminUserList'
description: ''
post:
operationId: v1_account_admin_users_create
description: |-
Admin-only endpoint for full CRUD operations on Users.
Includes searching, filtering, and pagination.
tags:
- v1
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/AdminUserRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/AdminUserRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/AdminUserRequest'
required: true
security:
- tokenAuth: []
- jwtAuth: []
responses:
'201':
content:
application/json:
schema:
$ref: '#/components/schemas/AdminUser'
description: ''
/api/v1/account/admin/users/{id}/:
get:
operationId: v1_account_admin_users_retrieve
description: |-
Admin-only endpoint for full CRUD operations on Users.
Includes searching, filtering, and pagination.
parameters:
- in: path
name: id
schema:
type: integer
description: A unique integer value identifying this User.
required: true
tags:
- v1
security:
- tokenAuth: []
- jwtAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/AdminUser'
description: ''
put:
operationId: v1_account_admin_users_update
description: |-
Admin-only endpoint for full CRUD operations on Users.
Includes searching, filtering, and pagination.
parameters:
- in: path
name: id
schema:
type: integer
description: A unique integer value identifying this User.
required: true
tags:
- v1
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/AdminUserRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/AdminUserRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/AdminUserRequest'
required: true
security:
- tokenAuth: []
- jwtAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/AdminUser'
description: ''
patch:
operationId: v1_account_admin_users_partial_update
description: |-
Admin-only endpoint for full CRUD operations on Users.
Includes searching, filtering, and pagination.
parameters:
- in: path
name: id
schema:
type: integer
description: A unique integer value identifying this User.
required: true
tags:
- v1
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/PatchedAdminUserRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/PatchedAdminUserRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/PatchedAdminUserRequest'
security:
- tokenAuth: []
- jwtAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/AdminUser'
description: ''
delete:
operationId: v1_account_admin_users_destroy
description: |-
Admin-only endpoint for full CRUD operations on Users.
Includes searching, filtering, and pagination.
parameters:
- in: path
name: id
schema:
type: integer
description: A unique integer value identifying this User.
required: true
tags:
- v1
security:
- tokenAuth: []
- jwtAuth: []
responses:
'204':
description: No response body
/api/v1/account/admin/users/export_excel/:
get:
operationId: v1_account_admin_users_export_excel_retrieve
description: |-
Export users to an Excel (.xlsx) file.
Accepts user_ids in POST body for selective bulk export,
or uses current queryset filters if no specific IDs are provided.
tags:
- v1
security:
- tokenAuth: []
- jwtAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/AdminUser'
description: ''
post:
operationId: v1_account_admin_users_export_excel_create
description: |-
Export users to an Excel (.xlsx) file.
Accepts user_ids in POST body for selective bulk export,
or uses current queryset filters if no specific IDs are provided.
tags:
- v1
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/AdminUserRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/AdminUserRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/AdminUserRequest'
required: true
security:
- tokenAuth: []
- jwtAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/AdminUser'
description: ''
/api/v1/account/exchange-token/:
post:
operationId: v1_account_exchange_token_create
description: تبدیل temporary token به اطلاعات کاربر برای ورود از اپ موبایل
tags:
- v1
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/ExchangeTokenRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/ExchangeTokenRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/ExchangeTokenRequest'
required: true
security:
- jwtAuth: []
- tokenAuth: []
- cookieAuth: []
- jwtAuth: []
- {}
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/ExchangeToken'
description: ''
/api/v1/account/guest/:
post:
operationId: v1_account_guest_create
tags:
- v1
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/UserGuestRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/UserGuestRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/UserGuestRequest'
security:
- jwtAuth: []
- {}
responses:
'201':
content:
application/json:
schema:
$ref: '#/components/schemas/UserGuest'
description: ''
/api/v1/account/location-update/:
post:
operationId: v1_account_location_update_create
description: Records client coordinates and IP address for session security.
summary: Record location update
tags:
- Location
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/LocationHistoryRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/LocationHistoryRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/LocationHistoryRequest'
security:
- tokenAuth: []
- jwtAuth: []
responses:
'201':
content:
application/json:
schema:
$ref: '#/components/schemas/LocationHistory'
description: ''
/api/v1/account/login/:
post:
operationId: v1_account_login_create
tags:
- v1
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/UserLoginRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/UserLoginRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/UserLoginRequest'
required: true
security:
- jwtAuth: []
- {}
responses:
'201':
content:
application/json:
schema:
$ref: '#/components/schemas/UserLogin'
description: ''
/api/v1/account/notif/:
get:
operationId: v1_account_notif_list
description: Retrieve a paginated list of notifications for the authenticated
user.
summary: Retrieve user notifications
parameters:
- name: page
required: false
in: query
description: A page number within the paginated result set.
schema:
type: integer
- name: page_size
required: false
in: query
description: Number of results to return per page.
schema:
type: integer
tags:
- Notifications
security:
- tokenAuth: []
- jwtAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/PaginatedNotificationList'
description: ''
/api/v1/account/notif/read/:
post:
operationId: v1_account_notif_read_create
description: Mark all notifications as read for the authenticated user.
summary: Mark all notifications as read
tags:
- Notifications
security:
- tokenAuth: []
- jwtAuth: []
responses:
'200':
description: All notifications marked as read
/api/v1/account/notif/send/:
post:
operationId: v1_account_notif_send_create
description: Dispatch an in-app notification to a specific user.
summary: Send notification to user
tags:
- Notifications
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/SendNotificationRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/SendNotificationRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/SendNotificationRequest'
required: true
security:
- tokenAuth: []
- jwtAuth: []
responses:
'200':
description: Notification dispatched.
'404':
description: User not found.
/api/v1/account/profile/:
get:
operationId: v1_account_profile_retrieve
tags:
- v1
security:
- tokenAuth: []
- jwtAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/UserProfile'
description: ''
/api/v1/account/profile/delete/:
delete:
operationId: v1_account_profile_delete_destroy
description: Soft deletes the current authenticated user account and revokes
active tokens.
summary: Delete current user account
tags:
- Account
security:
- tokenAuth: []
- jwtAuth: []
responses:
'204':
description: Account successfully deleted
'404':
description: User does not exist
/api/v1/account/profile/update/:
put:
operationId: v1_account_profile_update_update
tags:
- v1
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/UserProfileRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/UserProfileRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/UserProfileRequest'
security:
- tokenAuth: []
- jwtAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/UserProfile'
description: ''
patch:
operationId: v1_account_profile_update_partial_update
tags:
- v1
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/PatchedUserProfileRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/PatchedUserProfileRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/PatchedUserProfileRequest'
security:
- tokenAuth: []
- jwtAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/UserProfile'
description: ''
/api/v1/account/recover/:
post:
operationId: v1_account_recover_create
tags:
- v1
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/UserRecoverPasswordRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/UserRecoverPasswordRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/UserRecoverPasswordRequest'
required: true
security:
- jwtAuth: []
- {}
responses:
'201':
content:
application/json:
schema:
$ref: '#/components/schemas/UserRecoverPassword'
description: ''
/api/v1/account/region-info/:
get:
operationId: v1_account_region_info_retrieve
description: Returns basic client region, browser, and network info.
summary: Get client region info
tags:
- Location
security:
- jwtAuth: []
- tokenAuth: []
- cookieAuth: []
- jwtAuth: []
- {}
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/RegionInfo'
description: ''
/api/v1/account/register/:
post:
operationId: v1_account_register_create
tags:
- v1
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/UserRegisterRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/UserRegisterRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/UserRegisterRequest'
required: true
security:
- jwtAuth: []
- {}
responses:
'201':
content:
application/json:
schema:
$ref: '#/components/schemas/UserRegister'
description: ''
/api/v1/account/reset/:
post:
operationId: v1_account_reset_create
tags:
- v1
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/UserResetPasswordRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/UserResetPasswordRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/UserResetPasswordRequest'
required: true
security:
- tokenAuth: []
- jwtAuth: []
responses:
'201':
description: No response body
/api/v1/account/update-fcm/:
post:
operationId: v1_account_update_fcm_create
tags:
- v1
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/UserFCMRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/UserFCMRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/UserFCMRequest'
security:
- tokenAuth: []
- jwtAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/UserFCM'
description: ''
/api/v1/account/verify/:
post:
operationId: v1_account_verify_create
tags:
- v1
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/UserVerifyRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/UserVerifyRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/UserVerifyRequest'
required: true
security:
- jwtAuth: []
- {}
responses:
'201':
content:
application/json:
schema:
$ref: '#/components/schemas/UserVerify'
description: ''
/api/v1/account/web/register/:
post:
operationId: v1_account_web_register_create
tags:
- v1
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/WebUserRegisterRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/WebUserRegisterRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/WebUserRegisterRequest'
required: true
security:
- jwtAuth: []
- {}
responses:
'201':
content:
application/json:
schema:
$ref: '#/components/schemas/WebUserRegister'
description: ''
/api/v1/auth/documents/:
get:
operationId: v1_auth_documents_list
description: Retrieves a list of verification documents uploaded by the current
user or managed by admin.
summary: List user verification documents
parameters:
- name: page
required: false
in: query
description: A page number within the paginated result set.
schema:
type: integer
- name: page_size
required: false
in: query
description: Number of results to return per page.
schema:
type: integer
tags:
- Authentication & Profile
security:
- jwtAuth: []
- tokenAuth: []
- cookieAuth: []
- jwtAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/PaginatedVerificationDocumentList'
description: ''
post:
operationId: v1_auth_documents_create
description: Uploads an identity card, passport, institutional license, or recommendation
letter for account verification.
summary: Upload verification document
tags:
- Authentication & Profile
requestBody:
content:
multipart/form-data:
schema:
$ref: '#/components/schemas/VerificationDocumentUploadRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/VerificationDocumentUploadRequest'
application/json:
schema:
$ref: '#/components/schemas/VerificationDocumentUploadRequest'
required: true
security:
- jwtAuth: []
- tokenAuth: []
- cookieAuth: []
- jwtAuth: []
responses:
'201':
content:
application/json:
schema:
$ref: '#/components/schemas/VerificationDocument'
description: ''
'400':
description: Invalid document upload data
/api/v1/auth/me/:
get:
operationId: v1_auth_me_retrieve
description: Returns detailed profile data, role hierarchy, and verification
status for authenticated user.
summary: Get current user details and permissions
tags:
- Authentication & Profile
security:
- jwtAuth: []
- tokenAuth: []
- cookieAuth: []
- jwtAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/UserMe'
description: ''
patch:
operationId: v1_auth_me_partial_update
description: Partially updates user profile attributes (name, phone, bio, languages,
skills, country, city, avatar).
summary: Update current user details
tags:
- Authentication & Profile
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/PatchedUserMeUpdateRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/PatchedUserMeUpdateRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/PatchedUserMeUpdateRequest'
security:
- jwtAuth: []
- tokenAuth: []
- cookieAuth: []
- jwtAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/UserMe'
description: ''
/api/v1/auth/recover-password/:
post:
operationId: v1_auth_recover_password_create
description: Generates and dispatches a password recovery token to the specified
user email.
summary: Request password recovery token
tags:
- Authentication & Profile
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/PasswordRecoverRequestRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/PasswordRecoverRequestRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/PasswordRecoverRequestRequest'
required: true
security:
- jwtAuth: []
- tokenAuth: []
- cookieAuth: []
- jwtAuth: []
- {}
responses:
'200':
description: Reset instructions sent if email exists
/api/v1/auth/register/:
post:
operationId: v1_auth_register_create
description: Creates a new account and immediately issues JWT access and refresh
tokens.
summary: Register new user or representative
tags:
- Authentication & Profile
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/RegisterRequestRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/RegisterRequestRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/RegisterRequestRequest'
required: true
security:
- jwtAuth: []
- tokenAuth: []
- cookieAuth: []
- jwtAuth: []
- {}
responses:
'201':
content:
application/json:
schema:
$ref: '#/components/schemas/RegisterResponse'
description: ''
'400':
description: Validation error
/api/v1/auth/reset-password/:
post:
operationId: v1_auth_reset_password_create
description: Resets the account password given a valid verification token.
summary: Reset user password using token
tags:
- Authentication & Profile
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/PasswordResetRequestRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/PasswordResetRequestRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/PasswordResetRequestRequest'
required: true
security:
- jwtAuth: []
- tokenAuth: []
- cookieAuth: []
- jwtAuth: []
- {}
responses:
'200':
description: Password reset successfully
'400':
description: Invalid or expired token
/api/v1/auth/token/:
post:
operationId: v1_auth_token_create
description: |-
Takes a set of user credentials and returns an access and refresh JSON web
token pair to prove the authentication of those credentials.
tags:
- v1
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/TokenObtainPairRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/TokenObtainPairRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/TokenObtainPairRequest'
required: true
security:
- jwtAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/TokenObtainPair'
description: ''
/api/v1/auth/token/refresh/:
post:
operationId: v1_auth_token_refresh_create
description: |-
Takes a refresh type JSON web token and returns an access type JSON web
token if the refresh token is valid.
tags:
- v1
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/TokenRefreshRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/TokenRefreshRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/TokenRefreshRequest'
required: true
security:
- jwtAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/TokenRefresh'
description: ''
/api/v1/auth/token/verify/:
post:
operationId: v1_auth_token_verify_create
description: |-
Takes a token and indicates if it is valid. This view provides no
information about a token's fitness for a particular use.
tags:
- v1
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/TokenVerifyRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/TokenVerifyRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/TokenVerifyRequest'
required: true
security:
- jwtAuth: []
responses:
'200':
description: No response body
/api/v1/chat/centrifugo-token/:
get:
operationId: v1_chat_centrifugo_token_retrieve
description: Generates an HMAC-SHA256 connection JWT for client WebSocket authentication
with Centrifugo v5.
summary: Obtain Centrifugo real-time WebSocket connection token
tags:
- Real-Time Messaging & Chat
security:
- jwtAuth: []
- tokenAuth: []
- cookieAuth: []
- jwtAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/CentrifugoTokenResponse'
description: ''
/api/v1/chat/rooms/:
get:
operationId: v1_chat_rooms_list
description: Returns all active direct and group conversations for the authenticated
user with unread counts.
summary: List active conversations & direct chats
parameters:
- name: page
required: false
in: query
description: A page number within the paginated result set.
schema:
type: integer
- name: page_size
required: false
in: query
description: Number of results to return per page.
schema:
type: integer
tags:
- Real-Time Messaging & Chat
security:
- jwtAuth: []
- tokenAuth: []
- cookieAuth: []
- jwtAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/PaginatedChatRoomListList'
description: ''
post:
operationId: v1_chat_rooms_create
description: Creates a new direct chat or multi-institution group room. Reuses
existing direct chat if already active.
summary: Start conversation with user or institution
tags:
- Real-Time Messaging & Chat
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/ChatRoomCreateRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/ChatRoomCreateRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/ChatRoomCreateRequest'
security:
- jwtAuth: []
- tokenAuth: []
- cookieAuth: []
- jwtAuth: []
responses:
'201':
content:
application/json:
schema:
$ref: '#/components/schemas/ChatRoomDetail'
description: ''
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/ChatRoomDetail'
description: ''
'400':
description: Validation error
/api/v1/chat/rooms/{id}/:
get:
operationId: v1_chat_rooms_retrieve
description: Retrieves metadata, participants, and channel name for a conversation.
summary: Get chat room details & metadata
parameters:
- in: path
name: id
schema:
type: integer
required: true
tags:
- Real-Time Messaging & Chat
security:
- jwtAuth: []
- tokenAuth: []
- cookieAuth: []
- jwtAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/ChatRoomDetail'
description: ''
'403':
description: Not a participant in this conversation
'404':
description: Room not found
/api/v1/chat/rooms/{id}/messages/:
get:
operationId: v1_chat_rooms_messages_list
description: Returns paginated message history for a conversation and marks
messages as read.
summary: Get message history for chat room
parameters:
- in: path
name: id
schema:
type: integer
required: true
- name: page
required: false
in: query
description: A page number within the paginated result set.
schema:
type: integer
- name: page_size
required: false
in: query
description: Number of results to return per page.
schema:
type: integer
tags:
- Real-Time Messaging & Chat
security:
- jwtAuth: []
- tokenAuth: []
- cookieAuth: []
- jwtAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/PaginatedChatMessageList'
description: ''
post:
operationId: v1_chat_rooms_messages_create
description: Persists message to database and broadcasts real-time WebSocket
event via Centrifugo.
summary: Send message in conversation
parameters:
- in: path
name: id
schema:
type: integer
required: true
tags:
- Real-Time Messaging & Chat
requestBody:
content:
multipart/form-data:
schema:
$ref: '#/components/schemas/ChatMessageCreateRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/ChatMessageCreateRequest'
application/json:
schema:
$ref: '#/components/schemas/ChatMessageCreateRequest'
security:
- jwtAuth: []
- tokenAuth: []
- cookieAuth: []
- jwtAuth: []
responses:
'201':
content:
application/json:
schema:
$ref: '#/components/schemas/ChatMessage'
description: ''
'400':
description: Validation error
'403':
description: Permission denied
/api/v1/chat/rooms/{id}/read/:
post:
operationId: v1_chat_rooms_read_create
description: Updates read receipts for all messages in the room and emits read
event.
summary: Mark all conversation messages as read
parameters:
- in: path
name: id
schema:
type: integer
required: true
tags:
- Real-Time Messaging & Chat
security:
- jwtAuth: []
- tokenAuth: []
- cookieAuth: []
- jwtAuth: []
responses:
'200':
description: Messages marked as read
/api/v1/cms/categories/:
get:
operationId: v1_cms_categories_list
description: Returns content categories with optional language filtering.
summary: List post categories
parameters:
- in: query
name: language
schema:
type: string
description: Filter categories by language code (fa, ar, en, ur, fr)
- name: page
required: false
in: query
description: A page number within the paginated result set.
schema:
type: integer
- name: page_size
required: false
in: query
description: Number of results to return per page.
schema:
type: integer
tags:
- Content Management System (CMS)
security:
- jwtAuth: []
- tokenAuth: []
- cookieAuth: []
- jwtAuth: []
- {}
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/PaginatedPostCategoryList'
description: ''
/api/v1/cms/media/:
get:
operationId: v1_cms_media_list
description: Retrieves uploaded photos, videos, and documents.
summary: List media library assets
parameters:
- in: query
name: media_type
schema:
type: string
description: Filter by media type (image, video, audio, document)
- name: page
required: false
in: query
description: A page number within the paginated result set.
schema:
type: integer
- name: page_size
required: false
in: query
description: Number of results to return per page.
schema:
type: integer
tags:
- Content Management System (CMS)
security:
- jwtAuth: []
- tokenAuth: []
- cookieAuth: []
- jwtAuth: []
- {}
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/PaginatedMediaAssetList'
description: ''
post:
operationId: v1_cms_media_create
description: Uploads a new photo, document, or audio file to the media library.
summary: Upload media asset
tags:
- Content Management System (CMS)
requestBody:
content:
multipart/form-data:
schema:
$ref: '#/components/schemas/MediaAssetRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/MediaAssetRequest'
application/json:
schema:
$ref: '#/components/schemas/MediaAssetRequest'
required: true
security:
- jwtAuth: []
- tokenAuth: []
- cookieAuth: []
- jwtAuth: []
responses:
'201':
content:
application/json:
schema:
$ref: '#/components/schemas/MediaAsset'
description: ''
/api/v1/cms/posts/:
get:
operationId: v1_cms_posts_list
description: Returns a paginated list of published news, articles, and interviews
with multilingual filtering.
summary: List multilingual posts & articles
parameters:
- in: query
name: author_id
schema:
type: integer
description: Filter by author user ID
- in: query
name: category
schema:
type: string
description: Filter by category ID or slug
- in: query
name: institution_id
schema:
type: integer
description: Filter by associated institution ID
- in: query
name: is_featured
schema:
type: boolean
description: Filter by featured status
- in: query
name: language
schema:
type: string
description: Filter by language code (fa, ar, en, ur, fr)
- in: query
name: my_posts
schema:
type: boolean
description: Filter by current authenticated user posts
- name: page
required: false
in: query
description: A page number within the paginated result set.
schema:
type: integer
- name: page_size
required: false
in: query
description: Number of results to return per page.
schema:
type: integer
- in: query
name: post_type
schema:
type: string
description: Filter by type (news, article, report, interview)
- in: query
name: search
schema:
type: string
description: Search text in title, excerpt, and content
- in: query
name: status
schema:
type: string
description: Filter by status (staff/admin only)
- in: query
name: tag
schema:
type: string
description: Filter by tag string
tags:
- Content Management System (CMS)
security:
- jwtAuth: []
- tokenAuth: []
- cookieAuth: []
- jwtAuth: []
- {}
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/PaginatedPostListList'
description: ''
post:
operationId: v1_cms_posts_create
description: Creates a new article, news announcement, or report.
summary: Publish or draft new post
tags:
- Content Management System (CMS)
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/PostCreateUpdateRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/PostCreateUpdateRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/PostCreateUpdateRequest'
required: true
security:
- jwtAuth: []
- tokenAuth: []
- cookieAuth: []
- jwtAuth: []
responses:
'201':
content:
application/json:
schema:
$ref: '#/components/schemas/PostDetail'
description: ''
'400':
description: Validation error
'401':
description: Authentication required
/api/v1/cms/posts/{pk_or_slug}/:
get:
operationId: v1_cms_posts_retrieve
description: Retrieves full article content and increments the view counter.
summary: Get full post details
parameters:
- in: path
name: pk_or_slug
schema:
type: string
required: true
tags:
- Content Management System (CMS)
security:
- jwtAuth: []
- tokenAuth: []
- cookieAuth: []
- jwtAuth: []
- {}
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/PostDetail'
description: ''
'404':
description: Post not found
patch:
operationId: v1_cms_posts_partial_update
description: Updates an existing post. Permitted for original author, institution
editors, or platform admins.
summary: Update post
parameters:
- in: path
name: pk_or_slug
schema:
type: string
required: true
tags:
- Content Management System (CMS)
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/PatchedPostCreateUpdateRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/PatchedPostCreateUpdateRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/PatchedPostCreateUpdateRequest'
security:
- jwtAuth: []
- tokenAuth: []
- cookieAuth: []
- jwtAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/PostDetail'
description: ''
'403':
description: Permission denied
delete:
operationId: v1_cms_posts_destroy
description: Removes a post from the platform.
summary: Delete post
parameters:
- in: path
name: pk_or_slug
schema:
type: string
required: true
tags:
- Content Management System (CMS)
security:
- jwtAuth: []
- tokenAuth: []
- cookieAuth: []
- jwtAuth: []
responses:
'204':
description: Post deleted successfully
'403':
description: Permission denied
/api/v1/cms/posts/{pk_or_slug}/comments/:
get:
operationId: v1_cms_posts_comments_list
description: Retrieves approved reader comments for a post.
summary: List post comments
parameters:
- name: page
required: false
in: query
description: A page number within the paginated result set.
schema:
type: integer
- name: page_size
required: false
in: query
description: Number of results to return per page.
schema:
type: integer
- in: path
name: pk_or_slug
schema:
type: string
required: true
tags:
- Content Management System (CMS)
security:
- jwtAuth: []
- tokenAuth: []
- cookieAuth: []
- jwtAuth: []
- {}
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/PaginatedPostCommentList'
description: ''
post:
operationId: v1_cms_posts_comments_create
description: Submits a comment on an article.
summary: Submit post comment
parameters:
- in: path
name: pk_or_slug
schema:
type: string
required: true
tags:
- Content Management System (CMS)
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/PostCommentCreateRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/PostCommentCreateRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/PostCommentCreateRequest'
required: true
security:
- jwtAuth: []
- tokenAuth: []
- cookieAuth: []
- jwtAuth: []
- {}
responses:
'201':
content:
application/json:
schema:
$ref: '#/components/schemas/PostComment'
description: ''
'400':
description: Validation error
/api/v1/cms/posts/{pk_or_slug}/like/:
post:
operationId: v1_cms_posts_like_create
description: Likes or unlikes an article for the authenticated user and updates
the like counter.
summary: Toggle like on post
parameters:
- in: path
name: pk_or_slug
schema:
type: string
required: true
tags:
- Content Management System (CMS)
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/PostLikeResponseRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/PostLikeResponseRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/PostLikeResponseRequest'
required: true
security:
- jwtAuth: []
- tokenAuth: []
- cookieAuth: []
- jwtAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/PostLikeResponse'
description: ''
/api/v1/cms/tags/:
get:
operationId: v1_cms_tags_list
description: Returns distinct content tags used across posts.
summary: List CMS tags
parameters:
- name: page
required: false
in: query
description: A page number within the paginated result set.
schema:
type: integer
- name: page_size
required: false
in: query
description: Number of results to return per page.
schema:
type: integer
tags:
- Content Management System (CMS)
security:
- jwtAuth: []
- tokenAuth: []
- cookieAuth: []
- jwtAuth: []
- {}
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/PaginatedPostTagList'
description: ''
/api/v1/contact-us/:
post:
operationId: v1_contact_us_create
description: Submit a user contact or support inquiry
tags:
- v1
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/SupportMessageCreateRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/SupportMessageCreateRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/SupportMessageCreateRequest'
required: true
security:
- jwtAuth: []
- tokenAuth: []
- cookieAuth: []
- jwtAuth: []
- {}
responses:
'201':
content:
application/json:
schema:
$ref: '#/components/schemas/SupportMessageCreate'
description: ''
/api/v1/events/:
get:
operationId: v1_events_list
description: Filter events by category, date range, institution organizer, location
type, and search keywords.
summary: List events and programs
parameters:
- in: query
name: category
schema:
type: string
description: Event category filter
- in: query
name: end_date
schema:
type: string
format: date
description: Filter to date (YYYY-MM-DD)
- in: query
name: is_featured
schema:
type: boolean
description: Filter featured events
- in: query
name: language
schema:
type: string
description: Event language (fa, ar, en, ur, fr)
- in: query
name: location_type
schema:
type: string
description: in_person, online, or hybrid
- in: query
name: organizer
schema:
type: integer
description: Organizer institution ID
- name: page
required: false
in: query
description: A page number within the paginated result set.
schema:
type: integer
- name: page_size
required: false
in: query
description: Number of results to return per page.
schema:
type: integer
- in: query
name: search
schema:
type: string
description: Search in title, description, or speaker
- in: query
name: start_date
schema:
type: string
format: date
description: Filter from date (YYYY-MM-DD)
tags:
- Events
security:
- jwtAuth: []
- tokenAuth: []
- cookieAuth: []
- jwtAuth: []
- {}
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/PaginatedEventListList'
description: ''
post:
operationId: v1_events_create
description: Create an event on behalf of an institution where the user is an
admin/editor.
summary: Create a new event
tags:
- Events
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/EventCreateUpdateRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/EventCreateUpdateRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/EventCreateUpdateRequest'
required: true
security:
- jwtAuth: []
- tokenAuth: []
- cookieAuth: []
- jwtAuth: []
responses:
'201':
content:
application/json:
schema:
$ref: '#/components/schemas/EventDetail'
description: ''
/api/v1/events/{id_or_slug}/:
get:
operationId: v1_events_retrieve
description: Get full event details, speaker bio, registration status for current
user, and venue/meeting info.
summary: Retrieve event details
parameters:
- in: path
name: id_or_slug
schema:
type: string
required: true
tags:
- Events
security:
- jwtAuth: []
- tokenAuth: []
- cookieAuth: []
- jwtAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/EventDetail'
description: ''
put:
operationId: v1_events_update
parameters:
- in: path
name: id_or_slug
schema:
type: string
required: true
tags:
- v1
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/EventCreateUpdateRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/EventCreateUpdateRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/EventCreateUpdateRequest'
required: true
security:
- jwtAuth: []
- tokenAuth: []
- cookieAuth: []
- jwtAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/EventCreateUpdate'
description: ''
patch:
operationId: v1_events_partial_update
description: Update event metadata (requires organizer admin/editor permission).
summary: Update event
parameters:
- in: path
name: id_or_slug
schema:
type: string
required: true
tags:
- Events
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/PatchedEventCreateUpdateRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/PatchedEventCreateUpdateRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/PatchedEventCreateUpdateRequest'
security:
- jwtAuth: []
- tokenAuth: []
- cookieAuth: []
- jwtAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/EventDetail'
description: ''
delete:
operationId: v1_events_destroy
description: Delete or deactivate an event.
summary: Delete event
parameters:
- in: path
name: id_or_slug
schema:
type: string
required: true
tags:
- Events
security:
- jwtAuth: []
- tokenAuth: []
- cookieAuth: []
- jwtAuth: []
responses:
'204':
description: No response body
/api/v1/events/{id_or_slug}/cancel-registration/:
post:
operationId: v1_events_cancel_registration_create
description: Cancel registration for the current authenticated user.
summary: Cancel event registration
parameters:
- in: path
name: id_or_slug
schema:
type: string
required: true
tags:
- Events
security:
- jwtAuth: []
- tokenAuth: []
- cookieAuth: []
- jwtAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/EventDetail'
description: ''
/api/v1/events/{id_or_slug}/register/:
post:
operationId: v1_events_register_create
description: Register the current authenticated user for this event.
summary: Register for an event
parameters:
- in: path
name: id_or_slug
schema:
type: string
required: true
tags:
- Events
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/EventRegisterInputRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/EventRegisterInputRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/EventRegisterInputRequest'
security:
- jwtAuth: []
- tokenAuth: []
- cookieAuth: []
- jwtAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/EventDetail'
description: ''
/api/v1/events/{id_or_slug}/registrations/:
get:
operationId: v1_events_registrations_list
description: View registered participants for an event (organizer admin/editor
or staff only).
summary: List event attendees
parameters:
- in: path
name: id_or_slug
schema:
type: string
required: true
- name: page
required: false
in: query
description: A page number within the paginated result set.
schema:
type: integer
- name: page_size
required: false
in: query
description: Number of results to return per page.
schema:
type: integer
tags:
- Events
security:
- jwtAuth: []
- tokenAuth: []
- cookieAuth: []
- jwtAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/PaginatedEventRegistrationList'
description: ''
/api/v1/events/calendar/:
get:
operationId: v1_events_calendar_list
description: Get streamlined event entries for calendar components filtered
by month/year.
summary: Calendar view feed
parameters:
- in: query
name: category
schema:
type: string
description: Category filter
- in: query
name: month
schema:
type: integer
description: Calendar month (1-12)
- name: page
required: false
in: query
description: A page number within the paginated result set.
schema:
type: integer
- name: page_size
required: false
in: query
description: Number of results to return per page.
schema:
type: integer
- in: query
name: year
schema:
type: integer
description: Calendar year (e.g. 2026)
tags:
- Events
security:
- jwtAuth: []
- tokenAuth: []
- cookieAuth: []
- jwtAuth: []
- {}
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/PaginatedEventCalendarItemList'
description: ''
/api/v1/health/:
get:
operationId: v1_health_retrieve
description: Returns system status, current timestamp, and API version
summary: Check API server health status
tags:
- v1
security:
- jwtAuth: []
- tokenAuth: []
- cookieAuth: []
- jwtAuth: []
- {}
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/HealthCheckResponse'
description: ''
/api/v1/map/clusters/:
get:
operationId: v1_map_clusters_list
description: Returns aggregated institution counts and density breakdown per
country and region.
summary: Regional density & geographic cluster overview
parameters:
- name: page
required: false
in: query
description: A page number within the paginated result set.
schema:
type: integer
- name: page_size
required: false
in: query
description: Number of results to return per page.
schema:
type: integer
tags:
- Smart Geo-Atlas
security:
- jwtAuth: []
- tokenAuth: []
- cookieAuth: []
- jwtAuth: []
- {}
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/PaginatedRegionalDensityList'
description: ''
/api/v1/map/institutions/:
get:
operationId: v1_map_institutions_list
description: Returns geographic markers or aggregated clusters for institutions
within the current map viewport.
summary: Query map markers with bounding box & clustering
parameters:
- in: query
name: city
schema:
type: string
description: Filter by city
- in: query
name: cluster
schema:
type: boolean
description: Whether to cluster nearby pins (default true)
- in: query
name: country
schema:
type: string
description: Filter by country
- in: query
name: east
schema:
type: number
format: double
description: Easternmost longitude of viewport
- in: query
name: is_featured
schema:
type: boolean
description: Filter by featured status
- in: query
name: north
schema:
type: number
format: double
description: Northernmost latitude of viewport
- name: page
required: false
in: query
description: A page number within the paginated result set.
schema:
type: integer
- name: page_size
required: false
in: query
description: Number of results to return per page.
schema:
type: integer
- in: query
name: search
schema:
type: string
description: Search text query
- in: query
name: south
schema:
type: number
format: double
description: Southernmost latitude of viewport
- in: query
name: tag
schema:
type: string
description: Filter by tag string
- in: query
name: type
schema:
type: string
description: Filter by institution type
- in: query
name: west
schema:
type: number
format: double
description: Westernmost longitude of viewport
- in: query
name: zoom
schema:
type: integer
description: Current map zoom level (1 to 20, default 10)
tags:
- Smart Geo-Atlas
security:
- jwtAuth: []
- tokenAuth: []
- cookieAuth: []
- jwtAuth: []
- {}
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/PaginatedMapClusterItemList'
description: ''
/api/v1/map/stats/:
get:
operationId: v1_map_stats_retrieve
description: Returns total institutions, countries covered, cities count, and
classification distributions.
summary: Get global atlas statistics
tags:
- Smart Geo-Atlas
security:
- jwtAuth: []
- tokenAuth: []
- cookieAuth: []
- jwtAuth: []
- {}
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/MapStats'
description: ''
/api/v1/meetings/:
get:
operationId: v1_meetings_list
description: List bilateral video meetings involving the authenticated user's
affiliated institutions.
summary: List scheduled & pending meetings
parameters:
- in: query
name: end_date
schema:
type: string
format: date
description: Filter meetings to date (YYYY-MM-DD)
- in: query
name: institution_id
schema:
type: integer
description: Filter meetings by participating institution ID
- name: page
required: false
in: query
description: A page number within the paginated result set.
schema:
type: integer
- name: page_size
required: false
in: query
description: Number of results to return per page.
schema:
type: integer
- in: query
name: search
schema:
type: string
description: Search in title or agenda
- in: query
name: start_date
schema:
type: string
format: date
description: Filter meetings from date (YYYY-MM-DD)
- in: query
name: status
schema:
type: string
description: Meeting status (pending, scheduled, completed, cancelled, declined)
tags:
- Meetings
security:
- jwtAuth: []
- tokenAuth: []
- cookieAuth: []
- jwtAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/PaginatedMeetingListList'
description: ''
post:
operationId: v1_meetings_create
description: Schedule/propose a bilateral meeting between institutions (requires
institution admin/editor role).
summary: Propose a new video meeting
tags:
- Meetings
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/MeetingCreateRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/MeetingCreateRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/MeetingCreateRequest'
required: true
security:
- jwtAuth: []
- tokenAuth: []
- cookieAuth: []
- jwtAuth: []
responses:
'201':
content:
application/json:
schema:
$ref: '#/components/schemas/MeetingDetail'
description: ''
/api/v1/meetings/{id}/:
get:
operationId: v1_meetings_retrieve
description: Get full meeting details including video link, agenda, and participants.
summary: Retrieve meeting details
parameters:
- in: path
name: id
schema:
type: integer
required: true
tags:
- Meetings
security:
- jwtAuth: []
- tokenAuth: []
- cookieAuth: []
- jwtAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/MeetingDetail'
description: ''
put:
operationId: v1_meetings_update
parameters:
- in: path
name: id
schema:
type: integer
required: true
tags:
- v1
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/MeetingUpdateRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/MeetingUpdateRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/MeetingUpdateRequest'
required: true
security:
- jwtAuth: []
- tokenAuth: []
- cookieAuth: []
- jwtAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/MeetingUpdate'
description: ''
patch:
operationId: v1_meetings_partial_update
description: Accept, reschedule, decline, complete, or update meeting room URL
and agenda notes.
summary: Update or respond to meeting request
parameters:
- in: path
name: id
schema:
type: integer
required: true
tags:
- Meetings
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/PatchedMeetingUpdateRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/PatchedMeetingUpdateRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/PatchedMeetingUpdateRequest'
security:
- jwtAuth: []
- tokenAuth: []
- cookieAuth: []
- jwtAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/MeetingDetail'
description: ''
delete:
operationId: v1_meetings_destroy
description: Cancel or delete a meeting request.
summary: Cancel / delete meeting
parameters:
- in: path
name: id
schema:
type: integer
required: true
tags:
- Meetings
security:
- jwtAuth: []
- tokenAuth: []
- cookieAuth: []
- jwtAuth: []
responses:
'204':
description: No response body
/api/v1/profiles/:
get:
operationId: v1_profiles_list
description: Returns a paginated list of mosques, cultural centers, and institutes
with filtering.
summary: List active institutions
parameters:
- in: query
name: city
schema:
type: string
description: Filter by city name
- in: query
name: country
schema:
type: string
description: Filter by country name
- in: query
name: is_featured
schema:
type: boolean
description: Filter by featured status
- name: page
required: false
in: query
description: A page number within the paginated result set.
schema:
type: integer
- name: page_size
required: false
in: query
description: Number of results to return per page.
schema:
type: integer
- in: query
name: search
schema:
type: string
description: Search query across name, city, country, description
- in: query
name: tag
schema:
type: string
description: Filter by tag string
- in: query
name: type
schema:
type: string
description: Filter by institution type (mosque, cultural_center, etc.)
- in: query
name: verification_status
schema:
type: string
description: Filter by verification status (pending, approved, rejected)
tags:
- Institutions & Profiles
security:
- jwtAuth: []
- tokenAuth: []
- cookieAuth: []
- jwtAuth: []
- {}
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/PaginatedInstitutionListList'
description: ''
post:
operationId: v1_profiles_create
description: Registers a new institution profile and designates the creator
as primary Administrator.
summary: Register a new institution
tags:
- Institutions & Profiles
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/InstitutionCreateUpdateRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/InstitutionCreateUpdateRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/InstitutionCreateUpdateRequest'
required: true
security:
- jwtAuth: []
- tokenAuth: []
- cookieAuth: []
- jwtAuth: []
responses:
'201':
content:
application/json:
schema:
$ref: '#/components/schemas/InstitutionDetail'
description: ''
'400':
description: Validation error
'401':
description: Authentication required
/api/v1/profiles/{pk_or_slug}/:
get:
operationId: v1_profiles_retrieve
description: Retrieves complete institution information, historical timeline
milestones, and media gallery.
summary: Get full institution profile
parameters:
- in: path
name: pk_or_slug
schema:
type: string
required: true
tags:
- Institutions & Profiles
security:
- jwtAuth: []
- tokenAuth: []
- cookieAuth: []
- jwtAuth: []
- {}
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/InstitutionDetail'
description: ''
'404':
description: Institution not found
patch:
operationId: v1_profiles_partial_update
description: Updates details of an institution. Requires Admin or Editor role
on the institution.
summary: Update institution profile
parameters:
- in: path
name: pk_or_slug
schema:
type: string
required: true
tags:
- Institutions & Profiles
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/PatchedInstitutionCreateUpdateRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/PatchedInstitutionCreateUpdateRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/PatchedInstitutionCreateUpdateRequest'
security:
- jwtAuth: []
- tokenAuth: []
- cookieAuth: []
- jwtAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/InstitutionDetail'
description: ''
'403':
description: Permission denied
delete:
operationId: v1_profiles_destroy
description: Deactivates an institution. Permitted for institution administrator
or platform administrator.
summary: Deactivate / Delete institution
parameters:
- in: path
name: pk_or_slug
schema:
type: string
required: true
tags:
- Institutions & Profiles
security:
- jwtAuth: []
- tokenAuth: []
- cookieAuth: []
- jwtAuth: []
responses:
'204':
description: Institution successfully deactivated
'403':
description: Permission denied
/api/v1/profiles/{pk_or_slug}/follow/:
post:
operationId: v1_profiles_follow_create
description: Follows the specified institution to receive updates and news.
summary: Follow institution
parameters:
- in: path
name: pk_or_slug
schema:
type: string
required: true
tags:
- Institutions & Profiles
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/FollowResponseRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/FollowResponseRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/FollowResponseRequest'
required: true
security:
- jwtAuth: []
- tokenAuth: []
- cookieAuth: []
- jwtAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/FollowResponse'
description: ''
delete:
operationId: v1_profiles_follow_destroy
description: Unfollows the specified institution.
summary: Unfollow institution
parameters:
- in: path
name: pk_or_slug
schema:
type: string
required: true
tags:
- Institutions & Profiles
security:
- jwtAuth: []
- tokenAuth: []
- cookieAuth: []
- jwtAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/FollowResponse'
description: ''
/api/v1/profiles/{pk_or_slug}/media/:
get:
operationId: v1_profiles_media_list
description: Returns uploaded photos, videos, and documents for an institution.
summary: List media gallery assets
parameters:
- name: page
required: false
in: query
description: A page number within the paginated result set.
schema:
type: integer
- name: page_size
required: false
in: query
description: Number of results to return per page.
schema:
type: integer
- in: path
name: pk_or_slug
schema:
type: string
required: true
tags:
- Institutions & Profiles
security:
- jwtAuth: []
- tokenAuth: []
- cookieAuth: []
- jwtAuth: []
- {}
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/PaginatedInstitutionMediaList'
description: ''
post:
operationId: v1_profiles_media_create
description: Uploads a photo, video, or publication to the institution media
gallery.
summary: Upload media to gallery
parameters:
- in: path
name: pk_or_slug
schema:
type: string
required: true
tags:
- Institutions & Profiles
requestBody:
content:
multipart/form-data:
schema:
$ref: '#/components/schemas/InstitutionMediaRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/InstitutionMediaRequest'
application/json:
schema:
$ref: '#/components/schemas/InstitutionMediaRequest'
required: true
security:
- jwtAuth: []
- tokenAuth: []
- cookieAuth: []
- jwtAuth: []
responses:
'201':
content:
application/json:
schema:
$ref: '#/components/schemas/InstitutionMedia'
description: ''
/api/v1/profiles/{pk_or_slug}/media/{media_id}/:
delete:
operationId: v1_profiles_media_destroy
description: Removes an asset from the institution media gallery.
summary: Delete media item
parameters:
- in: path
name: media_id
schema:
type: integer
required: true
- in: path
name: pk_or_slug
schema:
type: string
required: true
tags:
- Institutions & Profiles
security:
- jwtAuth: []
- tokenAuth: []
- cookieAuth: []
- jwtAuth: []
responses:
'204':
description: Media deleted
/api/v1/profiles/{pk_or_slug}/members/:
get:
operationId: v1_profiles_members_list
description: Retrieves administrative and editorial team members of the institution.
summary: List institution team members
parameters:
- name: page
required: false
in: query
description: A page number within the paginated result set.
schema:
type: integer
- name: page_size
required: false
in: query
description: Number of results to return per page.
schema:
type: integer
- in: path
name: pk_or_slug
schema:
type: string
required: true
tags:
- Institutions & Profiles
security:
- jwtAuth: []
- tokenAuth: []
- cookieAuth: []
- jwtAuth: []
- {}
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/PaginatedInstitutionMemberList'
description: ''
post:
operationId: v1_profiles_members_create
description: Adds or updates a member role (admin, editor, viewer) for an existing
registered user by email.
summary: Delegate role / Add team member
parameters:
- in: path
name: pk_or_slug
schema:
type: string
required: true
tags:
- Institutions & Profiles
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/InstitutionMemberAddRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/InstitutionMemberAddRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/InstitutionMemberAddRequest'
required: true
security:
- jwtAuth: []
- tokenAuth: []
- cookieAuth: []
- jwtAuth: []
responses:
'201':
content:
application/json:
schema:
$ref: '#/components/schemas/InstitutionMember'
description: ''
'400':
description: User not found or invalid payload
'403':
description: Only institution administrators can delegate roles
/api/v1/profiles/{pk_or_slug}/members/{member_id}/:
delete:
operationId: v1_profiles_members_destroy
description: Revokes institution membership and delegated role for a user.
summary: Remove team member
parameters:
- in: path
name: member_id
schema:
type: integer
required: true
- in: path
name: pk_or_slug
schema:
type: string
required: true
tags:
- Institutions & Profiles
security:
- jwtAuth: []
- tokenAuth: []
- cookieAuth: []
- jwtAuth: []
responses:
'204':
description: Member removed
/api/v1/profiles/{pk_or_slug}/timeline/:
get:
operationId: v1_profiles_timeline_list
description: Returns historical milestone entries for an institution.
summary: List timeline milestones
parameters:
- name: page
required: false
in: query
description: A page number within the paginated result set.
schema:
type: integer
- name: page_size
required: false
in: query
description: Number of results to return per page.
schema:
type: integer
- in: path
name: pk_or_slug
schema:
type: string
required: true
tags:
- Institutions & Profiles
security:
- jwtAuth: []
- tokenAuth: []
- cookieAuth: []
- jwtAuth: []
- {}
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/PaginatedInstitutionTimelineList'
description: ''
post:
operationId: v1_profiles_timeline_create
description: Creates a new milestone in the institution historical timeline.
summary: Add timeline milestone
parameters:
- in: path
name: pk_or_slug
schema:
type: string
required: true
tags:
- Institutions & Profiles
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/InstitutionTimelineRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/InstitutionTimelineRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/InstitutionTimelineRequest'
required: true
security:
- jwtAuth: []
- tokenAuth: []
- cookieAuth: []
- jwtAuth: []
responses:
'201':
content:
application/json:
schema:
$ref: '#/components/schemas/InstitutionTimeline'
description: ''
/api/v1/profiles/{pk_or_slug}/timeline/{entry_id}/:
delete:
operationId: v1_profiles_timeline_destroy
description: Removes a timeline entry from the institution profile.
summary: Delete timeline milestone
parameters:
- in: path
name: entry_id
schema:
type: integer
required: true
- in: path
name: pk_or_slug
schema:
type: string
required: true
tags:
- Institutions & Profiles
security:
- jwtAuth: []
- tokenAuth: []
- cookieAuth: []
- jwtAuth: []
responses:
'204':
description: Entry deleted
/api/v1/projects/:
get:
operationId: v1_projects_list
description: Returns a paginated list of collaborative projects with filtering
by institution, category, and status.
summary: List collaborative projects
parameters:
- in: query
name: category
schema:
type: string
description: Filter by category name
- in: query
name: institution_id
schema:
type: integer
description: Filter by owner or collaborating institution ID
- in: query
name: owner_institution_id
schema:
type: integer
description: Filter specifically by owner institution ID
- name: page
required: false
in: query
description: A page number within the paginated result set.
schema:
type: integer
- name: page_size
required: false
in: query
description: Number of results to return per page.
schema:
type: integer
- in: query
name: search
schema:
type: string
description: Search query across title and description
- in: query
name: status
schema:
type: string
description: Filter by project status (active, completed, on_hold, planning)
tags:
- Collaborative Projects & Kanban
security:
- jwtAuth: []
- tokenAuth: []
- cookieAuth: []
- jwtAuth: []
- {}
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/PaginatedProjectListList'
description: ''
post:
operationId: v1_projects_create
description: Creates a new multi-institution collaborative project with default
Kanban columns.
summary: Create collaborative project
tags:
- Collaborative Projects & Kanban
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/ProjectCreateUpdateRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/ProjectCreateUpdateRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/ProjectCreateUpdateRequest'
required: true
security:
- jwtAuth: []
- tokenAuth: []
- cookieAuth: []
- jwtAuth: []
responses:
'201':
content:
application/json:
schema:
$ref: '#/components/schemas/ProjectDetail'
description: ''
'400':
description: Validation error
'401':
description: Authentication required
/api/v1/projects/{pk_or_slug}/:
get:
operationId: v1_projects_retrieve
description: Retrieves full project details, collaborating institutions, and
Kanban boards.
summary: Get project details
parameters:
- in: path
name: pk_or_slug
schema:
type: string
required: true
tags:
- Collaborative Projects & Kanban
security:
- jwtAuth: []
- tokenAuth: []
- cookieAuth: []
- jwtAuth: []
- {}
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/ProjectDetail'
description: ''
'404':
description: Project not found
patch:
operationId: v1_projects_partial_update
description: Updates project status, progress percentage, or details. Permitted
for owner and collaborating editors.
summary: Update project
parameters:
- in: path
name: pk_or_slug
schema:
type: string
required: true
tags:
- Collaborative Projects & Kanban
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/PatchedProjectCreateUpdateRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/PatchedProjectCreateUpdateRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/PatchedProjectCreateUpdateRequest'
security:
- jwtAuth: []
- tokenAuth: []
- cookieAuth: []
- jwtAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/ProjectDetail'
description: ''
'403':
description: Permission denied
delete:
operationId: v1_projects_destroy
description: Removes a collaborative project and associated Kanban boards.
summary: Delete project
parameters:
- in: path
name: pk_or_slug
schema:
type: string
required: true
tags:
- Collaborative Projects & Kanban
security:
- jwtAuth: []
- tokenAuth: []
- cookieAuth: []
- jwtAuth: []
responses:
'204':
description: Project deleted successfully
'403':
description: Permission denied
/api/v1/projects/{pk_or_slug}/documents/:
get:
operationId: v1_projects_documents_list
description: Returns uploaded agreements, contracts, and progress reports for
a project.
summary: List project documents & MOUs
parameters:
- name: page
required: false
in: query
description: A page number within the paginated result set.
schema:
type: integer
- name: page_size
required: false
in: query
description: Number of results to return per page.
schema:
type: integer
- in: path
name: pk_or_slug
schema:
type: string
required: true
tags:
- Collaborative Projects & Kanban
security:
- jwtAuth: []
- tokenAuth: []
- cookieAuth: []
- jwtAuth: []
- {}
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/PaginatedProjectDocumentList'
description: ''
post:
operationId: v1_projects_documents_create
description: Uploads an agreement, contract, or milestone report.
summary: Upload project document
parameters:
- in: path
name: pk_or_slug
schema:
type: string
required: true
tags:
- Collaborative Projects & Kanban
requestBody:
content:
multipart/form-data:
schema:
$ref: '#/components/schemas/ProjectDocumentRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/ProjectDocumentRequest'
application/json:
schema:
$ref: '#/components/schemas/ProjectDocumentRequest'
required: true
security:
- jwtAuth: []
- tokenAuth: []
- cookieAuth: []
- jwtAuth: []
responses:
'201':
content:
application/json:
schema:
$ref: '#/components/schemas/ProjectDocument'
description: ''
'400':
description: Validation error
'403':
description: Permission denied
/api/v1/projects/{pk_or_slug}/documents/{doc_id}/:
delete:
operationId: v1_projects_documents_destroy
description: Removes a document attachment from the project.
summary: Delete project document
parameters:
- in: path
name: doc_id
schema:
type: integer
required: true
- in: path
name: pk_or_slug
schema:
type: string
required: true
tags:
- Collaborative Projects & Kanban
security:
- jwtAuth: []
- tokenAuth: []
- cookieAuth: []
- jwtAuth: []
responses:
'204':
description: Document removed successfully
'403':
description: Permission denied
/api/v1/projects/{pk_or_slug}/kanban/:
get:
operationId: v1_projects_kanban_list
description: Returns hierarchical Kanban columns with nested task lists for
drag-and-drop board interfaces.
summary: Get project Kanban board hierarchy
parameters:
- name: page
required: false
in: query
description: A page number within the paginated result set.
schema:
type: integer
- name: page_size
required: false
in: query
description: Number of results to return per page.
schema:
type: integer
- in: path
name: pk_or_slug
schema:
type: string
required: true
tags:
- Collaborative Projects & Kanban
security:
- jwtAuth: []
- tokenAuth: []
- cookieAuth: []
- jwtAuth: []
- {}
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/PaginatedKanbanColumnList'
description: ''
/api/v1/projects/{pk_or_slug}/tasks/:
post:
operationId: v1_projects_tasks_create
description: Adds a new task under a specific column of the project.
summary: Create Kanban task
parameters:
- in: path
name: pk_or_slug
schema:
type: string
required: true
tags:
- Collaborative Projects & Kanban
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/KanbanTaskCreateUpdateRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/KanbanTaskCreateUpdateRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/KanbanTaskCreateUpdateRequest'
required: true
security:
- jwtAuth: []
- tokenAuth: []
- cookieAuth: []
- jwtAuth: []
responses:
'201':
content:
application/json:
schema:
$ref: '#/components/schemas/KanbanTask'
description: ''
'400':
description: Validation error
'403':
description: Permission denied
/api/v1/projects/{pk_or_slug}/tasks/{task_id}/:
patch:
operationId: v1_projects_tasks_partial_update
description: Updates task attributes, priority, assignee, or moves task to another
column / reorders within column.
summary: Update or move Kanban task
parameters:
- in: path
name: pk_or_slug
schema:
type: string
required: true
- in: path
name: task_id
schema:
type: integer
required: true
tags:
- Collaborative Projects & Kanban
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/PatchedKanbanTaskCreateUpdateRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/PatchedKanbanTaskCreateUpdateRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/PatchedKanbanTaskCreateUpdateRequest'
security:
- jwtAuth: []
- tokenAuth: []
- cookieAuth: []
- jwtAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/KanbanTask'
description: ''
'400':
description: Validation error
'403':
description: Permission denied
delete:
operationId: v1_projects_tasks_destroy
description: Removes a task from the project Kanban board.
summary: Delete Kanban task
parameters:
- in: path
name: pk_or_slug
schema:
type: string
required: true
- in: path
name: task_id
schema:
type: integer
required: true
tags:
- Collaborative Projects & Kanban
security:
- jwtAuth: []
- tokenAuth: []
- cookieAuth: []
- jwtAuth: []
responses:
'204':
description: Task deleted successfully
'403':
description: Permission denied
/api/v1/settings/about-us/:
get:
operationId: v1_settings_about_us_retrieve
tags:
- v1
security:
- tokenAuth: []
- jwtAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/AboutUs'
description: ''
put:
operationId: v1_settings_about_us_update
tags:
- v1
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/AboutUsRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/AboutUsRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/AboutUsRequest'
security:
- tokenAuth: []
- jwtAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/AboutUs'
description: ''
/api/v1/settings/about-us-dobodi/:
get:
operationId: v1_settings_about_us_dobodi_retrieve
tags:
- v1
security:
- tokenAuth: []
- jwtAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/AboutUsDobodi'
description: ''
put:
operationId: v1_settings_about_us_dobodi_update
tags:
- v1
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/AboutUsDobodiRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/AboutUsDobodiRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/AboutUsDobodiRequest'
security:
- tokenAuth: []
- jwtAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/AboutUsDobodi'
description: ''
/api/v1/settings/card/:
get:
operationId: v1_settings_card_retrieve
tags:
- v1
security:
- tokenAuth: []
- jwtAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/Card'
description: ''
put:
operationId: v1_settings_card_update
tags:
- v1
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CardRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/CardRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/CardRequest'
security:
- tokenAuth: []
- jwtAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/Card'
description: ''
/api/v1/settings/faq-course/:
get:
operationId: v1_settings_faq_course_retrieve
tags:
- v1
security:
- jwtAuth: []
- tokenAuth: []
- cookieAuth: []
- jwtAuth: []
- {}
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/FAQItem'
description: ''
/api/v1/settings/faq-general/:
get:
operationId: v1_settings_faq_general_retrieve
tags:
- v1
security:
- tokenAuth: []
- jwtAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/FAQItem'
description: ''
put:
operationId: v1_settings_faq_general_update
tags:
- v1
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/FAQItemRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/FAQItemRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/FAQItemRequest'
security:
- tokenAuth: []
- jwtAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/FAQItem'
description: ''
/api/v1/settings/support/:
get:
operationId: v1_settings_support_retrieve
tags:
- v1
security:
- tokenAuth: []
- jwtAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/Support'
description: ''
put:
operationId: v1_settings_support_update
tags:
- v1
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/SupportRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/SupportRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/SupportRequest'
security:
- tokenAuth: []
- jwtAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/Support'
description: ''
/api/v1/version/:
get:
operationId: v1_version_retrieve
description: Returns latest active mobile/web application version details
summary: Get active application version
tags:
- v1
security:
- jwtAuth: []
- tokenAuth: []
- cookieAuth: []
- jwtAuth: []
- {}
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/AppVersion'
description: ''
'404':
description: No active version found
components:
schemas:
AboutUs:
type: object
properties:
content:
type: string
default: ''
AboutUsDobodi:
type: object
properties:
arabic_text:
type: string
default: ''
translated_text:
type: string
default: ''
title:
type: string
default: ''
content:
type: string
default: ''
AboutUsDobodiRequest:
type: object
properties:
arabic_text:
type: string
default: ''
translated_text:
type: string
default: ''
title:
type: string
default: ''
content:
type: string
default: ''
AboutUsRequest:
type: object
properties:
content:
type: string
default: ''
AdminNotification:
type: object
properties:
id:
type: integer
readOnly: true
title:
type: string
maxLength: 255
message:
type: string
maxLength: 1024
is_read:
type: boolean
notification_type:
type: string
nullable: true
maxLength: 50
action:
type: string
maxLength: 50
navigate_to:
type: string
nullable: true
maxLength: 255
created_at:
type: string
format: date-time
readOnly: true
updated_at:
type: string
format: date-time
readOnly: true
user_fullname:
type: string
readOnly: true
user_email:
type: string
readOnly: true
user_id:
type: integer
readOnly: true
required:
- created_at
- id
- message
- title
- updated_at
- user_email
- user_fullname
- user_id
AdminNotificationRequest:
type: object
properties:
title:
type: string
minLength: 1
maxLength: 255
message:
type: string
minLength: 1
maxLength: 1024
is_read:
type: boolean
notification_type:
type: string
nullable: true
maxLength: 50
action:
type: string
minLength: 1
maxLength: 50
navigate_to:
type: string
nullable: true
maxLength: 255
required:
- message
- title
AdminUser:
type: object
properties:
id:
type: integer
readOnly: true
fullname:
type: string
nullable: true
title: Full Name
description: Full name of the user.
maxLength: 255
email:
type: string
format: email
phone_number:
type: string
nullable: true
description: e.g., +1 555 1234567
maxLength: 128
avatar:
type: string
nullable: true
gender:
nullable: true
oneOf:
- $ref: '#/components/schemas/GenderEnum'
- $ref: '#/components/schemas/BlankEnum'
- $ref: '#/components/schemas/NullEnum'
birthdate:
type: string
format: date
nullable: true
info:
type: string
nullable: true
title: Bio / Info
skill:
type: string
nullable: true
title: Skill / Role
maxLength: 512
city:
type: string
nullable: true
maxLength: 255
country:
type: string
nullable: true
maxLength: 255
device_id:
type: string
readOnly: true
device_os:
type: string
readOnly: true
user_agent:
type: string
readOnly: true
client_ip:
type: string
readOnly: true
fcm:
type: string
nullable: true
title: FCM Token
maxLength: 512
user_type:
$ref: '#/components/schemas/UserTypeEnum'
is_active:
type: boolean
title: Active
description: Designates whether this user should be treated as active.
is_staff:
type: boolean
is_superuser:
type: boolean
title: Superuser status
description: Designates that this user has all permissions without explicitly
assigning them.
date_joined:
type: string
format: date-time
readOnly: true
last_login:
type: string
format: date-time
readOnly: true
nullable: true
auth_token:
type: string
readOnly: true
plain_password:
type: string
readOnly: true
required:
- auth_token
- client_ip
- date_joined
- device_id
- device_os
- email
- id
- last_login
- plain_password
- user_agent
AdminUserRequest:
type: object
properties:
fullname:
type: string
nullable: true
title: Full Name
description: Full name of the user.
maxLength: 255
email:
type: string
format: email
minLength: 1
phone_number:
type: string
nullable: true
description: e.g., +1 555 1234567
maxLength: 128
password:
type: string
writeOnly: true
minLength: 1
avatar:
type: string
nullable: true
minLength: 1
gender:
nullable: true
oneOf:
- $ref: '#/components/schemas/GenderEnum'
- $ref: '#/components/schemas/BlankEnum'
- $ref: '#/components/schemas/NullEnum'
birthdate:
type: string
format: date
nullable: true
info:
type: string
nullable: true
title: Bio / Info
skill:
type: string
nullable: true
title: Skill / Role
maxLength: 512
city:
type: string
nullable: true
maxLength: 255
country:
type: string
nullable: true
maxLength: 255
fcm:
type: string
nullable: true
title: FCM Token
maxLength: 512
user_type:
$ref: '#/components/schemas/UserTypeEnum'
is_active:
type: boolean
title: Active
description: Designates whether this user should be treated as active.
is_staff:
type: boolean
is_superuser:
type: boolean
title: Superuser status
description: Designates that this user has all permissions without explicitly
assigning them.
required:
- email
AppTypeEnum:
enum:
- google_play
- app_store
- direct
type: string
description: |-
* `google_play` - Google Play
* `app_store` - Apple App Store
* `direct` - Direct Download
AppVersion:
type: object
properties:
id:
type: integer
readOnly: true
version:
type: string
description: Application version in format X.Y.Z (e.g., 1.0.0)
pattern: ^\d+\.\d+\.\d+$
maxLength: 20
apk_file:
type: string
format: uri
nullable: true
readOnly: true
description:
type: string
description: Release notes and changes for this version
app_type:
allOf:
- $ref: '#/components/schemas/AppTypeEnum'
title: App Distribution Platform
downloads_count:
type: integer
is_active:
type: boolean
title: Active
description: Is this version currently active?
created_at:
type: string
format: date-time
readOnly: true
updated_at:
type: string
format: date-time
readOnly: true
required:
- apk_file
- created_at
- id
- updated_at
- version
BlankEnum:
enum:
- ''
CMSCommentStatusEnum:
enum:
- pending
- approved
- spam
type: string
description: |-
* `pending` - Pending Moderation
* `approved` - Approved
* `spam` - Spam / Rejected
CMSPostLanguageEnum:
enum:
- fa
- ar
- en
- ur
- fr
type: string
description: |-
* `fa` - Persian
* `ar` - Arabic
* `en` - English
* `ur` - Urdu
* `fr` - French
CMSPostStatusEnum:
enum:
- draft
- review
- published
- archived
type: string
description: |-
* `draft` - Draft
* `review` - Under Review
* `published` - Published
* `archived` - Archived
Card:
type: object
properties:
card_number:
type: string
default: ''
card_name:
type: string
default: ''
whatsapp_number:
type: string
default: ''
CardRequest:
type: object
properties:
card_number:
type: string
default: ''
card_name:
type: string
default: ''
whatsapp_number:
type: string
default: ''
CategoryEnum:
enum:
- religious
- educational
- cultural
- counseling
- conference
- workshop
type: string
description: |-
* `religious` - Religious
* `educational` - Educational
* `cultural` - Cultural
* `counseling` - Counseling
* `conference` - Conference
* `workshop` - Workshop
CentrifugoTokenResponse:
type: object
properties:
token:
type: string
description: Signed HMAC-SHA256 JWT for Centrifugo WebSocket connection
ws_url:
type: string
description: WebSocket endpoint URL for frontend client
user_id:
type: integer
description: Authenticated user ID
expires_in:
type: integer
description: Token lifetime in seconds
required:
- expires_in
- token
- user_id
- ws_url
ChatInstitutionMini:
type: object
properties:
id:
type: integer
readOnly: true
name:
type: string
readOnly: true
title: Institution Name
description: Official name of the mosque, center, or institute.
slug:
type: string
readOnly: true
nullable: true
title: Slug / URL Identifier
pattern: ^[-\w]+$
type:
allOf:
- $ref: '#/components/schemas/TypeEnum'
readOnly: true
title: Institution Type
type_display:
type: string
readOnly: true
avatar:
type: string
format: uri
nullable: true
readOnly: true
title: Logo / Avatar
city:
type: string
readOnly: true
country:
type: string
readOnly: true
required:
- avatar
- city
- country
- id
- name
- slug
- type
- type_display
ChatMessage:
type: object
properties:
id:
type: integer
readOnly: true
room:
type: integer
readOnly: true
title: Chat Room
sender:
allOf:
- $ref: '#/components/schemas/ChatUserMini'
readOnly: true
sender_institution:
allOf:
- $ref: '#/components/schemas/ChatInstitutionMini'
readOnly: true
content:
type: string
readOnly: true
nullable: true
title: Message Text
attachment:
type: string
format: uri
nullable: true
readOnly: true
title: Attachment File
attachment_name:
type: string
readOnly: true
nullable: true
title: Attachment Filename
is_read_by_me:
type: boolean
readOnly: true
read_by_count:
type: integer
readOnly: true
created_at:
type: string
format: date-time
readOnly: true
title: Timestamp
required:
- attachment
- attachment_name
- content
- created_at
- id
- is_read_by_me
- read_by_count
- room
- sender
- sender_institution
ChatMessageCreateRequest:
type: object
properties:
content:
type: string
attachment:
type: string
format: binary
nullable: true
sender_institution_id:
type: integer
nullable: true
ChatRoomCreateRequest:
type: object
properties:
room_type:
allOf:
- $ref: '#/components/schemas/RoomTypeEnum'
default: direct
title:
type: string
maxLength: 255
target_user_id:
type: integer
nullable: true
target_institution_id:
type: integer
nullable: true
participant_user_ids:
type: array
items:
type: integer
participant_institution_ids:
type: array
items:
type: integer
initial_message:
type: string
ChatRoomDetail:
type: object
properties:
id:
type: integer
readOnly: true
room_type:
allOf:
- $ref: '#/components/schemas/RoomTypeEnum'
readOnly: true
title:
type: string
readOnly: true
nullable: true
title: Conversation Title
display_title:
type: string
readOnly: true
participant_users:
type: array
items:
$ref: '#/components/schemas/ChatUserMini'
readOnly: true
participant_institutions:
type: array
items:
$ref: '#/components/schemas/ChatInstitutionMini'
readOnly: true
unread_count:
type: integer
readOnly: true
centrifugo_channel:
type: string
readOnly: true
created_at:
type: string
format: date-time
readOnly: true
updated_at:
type: string
format: date-time
readOnly: true
title: Last Activity
required:
- centrifugo_channel
- created_at
- display_title
- id
- participant_institutions
- participant_users
- room_type
- title
- unread_count
- updated_at
ChatRoomList:
type: object
properties:
id:
type: integer
readOnly: true
room_type:
allOf:
- $ref: '#/components/schemas/RoomTypeEnum'
readOnly: true
title:
type: string
readOnly: true
nullable: true
title: Conversation Title
display_title:
type: string
readOnly: true
participant_users:
type: array
items:
$ref: '#/components/schemas/ChatUserMini'
readOnly: true
participant_institutions:
type: array
items:
$ref: '#/components/schemas/ChatInstitutionMini'
readOnly: true
last_message:
allOf:
- $ref: '#/components/schemas/ChatMessage'
nullable: true
readOnly: true
unread_count:
type: integer
readOnly: true
centrifugo_channel:
type: string
readOnly: true
updated_at:
type: string
format: date-time
readOnly: true
title: Last Activity
required:
- centrifugo_channel
- display_title
- id
- last_message
- participant_institutions
- participant_users
- room_type
- title
- unread_count
- updated_at
ChatUserMini:
type: object
properties:
id:
type: integer
readOnly: true
email:
type: string
format: email
readOnly: true
nullable: true
title: Email Address
description: User primary email address.
fullname:
type: string
readOnly: true
nullable: true
title: Full Name
description: Full name of the user.
avatar:
type: string
format: uri
nullable: true
readOnly: true
user_type:
allOf:
- $ref: '#/components/schemas/UserTypeEnum'
readOnly: true
required:
- avatar
- email
- fullname
- id
- user_type
DeviceOsEnum:
enum:
- android
- apple
- web
type: string
description: |-
* `android` - Android
* `apple` - Apple iOS
* `web` - Web
DocTypeEnum:
enum:
- mou
- report
- contract
- other
type: string
description: |-
* `mou` - MOU / Bilateral Agreement
* `report` - Progress / Milestone Report
* `contract` - Contract / Agreement
* `other` - Other Document
DocumentTypeEnum:
enum:
- national_id
- institution_license
- recommendation_letter
- student_card
- other
type: string
description: |-
* `national_id` - National ID / Passport
* `institution_license` - Institution Registration / License
* `recommendation_letter` - Recommendation Letter
* `student_card` - Student / Member Card
* `other` - Other Document
EventCalendarItem:
type: object
properties:
id:
type: integer
readOnly: true
title:
type: string
title: Event Title
maxLength: 255
slug:
oneOf:
- type: string
maxLength: 280
pattern: ^[-a-zA-Z0-9_]+$
- type: string
maxLength: 0
category:
$ref: '#/components/schemas/CategoryEnum'
event_date:
type: string
format: date
start_time:
type: string
format: time
end_time:
type: string
format: time
nullable: true
location_type:
$ref: '#/components/schemas/LocationTypeEnum'
organizer_name:
type: string
readOnly: true
is_featured:
type: boolean
required:
- event_date
- id
- organizer_name
- start_time
- title
EventCreateUpdate:
type: object
properties:
id:
type: integer
readOnly: true
title:
type: string
title: Event Title
maxLength: 255
description:
type: string
title: Event Description
category:
$ref: '#/components/schemas/CategoryEnum'
event_date:
type: string
format: date
start_time:
type: string
format: time
end_time:
type: string
format: time
nullable: true
speaker_name:
type: string
maxLength: 255
speaker_title:
type: string
title: Speaker Title / Affiliation
maxLength: 255
speaker_avatar:
type: string
format: uri
nullable: true
location_type:
$ref: '#/components/schemas/LocationTypeEnum'
venue_address:
type: string
maxLength: 500
online_meeting_url:
title: Online Meeting Link
oneOf:
- type: string
format: uri
maxLength: 200
- type: string
maxLength: 0
cover_image:
type: string
format: uri
nullable: true
capacity:
type: integer
title: Capacity Limit
is_active:
type: boolean
is_featured:
type: boolean
language:
$ref: '#/components/schemas/CMSPostLanguageEnum'
tags: {}
required:
- description
- event_date
- id
- start_time
- title
EventCreateUpdateRequest:
type: object
properties:
title:
type: string
minLength: 1
title: Event Title
maxLength: 255
description:
type: string
minLength: 1
title: Event Description
organizer_id:
type: integer
writeOnly: true
category:
$ref: '#/components/schemas/CategoryEnum'
event_date:
type: string
format: date
start_time:
type: string
format: time
end_time:
type: string
format: time
nullable: true
speaker_name:
type: string
maxLength: 255
speaker_title:
type: string
title: Speaker Title / Affiliation
maxLength: 255
speaker_avatar:
type: string
format: binary
nullable: true
location_type:
$ref: '#/components/schemas/LocationTypeEnum'
venue_address:
type: string
maxLength: 500
online_meeting_url:
title: Online Meeting Link
oneOf:
- type: string
format: uri
maxLength: 200
- type: string
maxLength: 0
cover_image:
type: string
format: binary
nullable: true
capacity:
type: integer
title: Capacity Limit
is_active:
type: boolean
is_featured:
type: boolean
language:
$ref: '#/components/schemas/CMSPostLanguageEnum'
tags: {}
required:
- description
- event_date
- organizer_id
- start_time
- title
EventDetail:
type: object
properties:
id:
type: integer
readOnly: true
title:
type: string
title: Event Title
maxLength: 255
slug:
oneOf:
- type: string
maxLength: 280
pattern: ^[-a-zA-Z0-9_]+$
- type: string
maxLength: 0
description:
type: string
title: Event Description
category:
$ref: '#/components/schemas/CategoryEnum'
event_date:
type: string
format: date
start_time:
type: string
format: time
end_time:
type: string
format: time
nullable: true
speaker_name:
type: string
maxLength: 255
speaker_title:
type: string
title: Speaker Title / Affiliation
maxLength: 255
speaker_avatar:
type: string
format: uri
nullable: true
location_type:
$ref: '#/components/schemas/LocationTypeEnum'
venue_address:
type: string
maxLength: 500
online_meeting_url:
title: Online Meeting Link
oneOf:
- type: string
format: uri
maxLength: 200
- type: string
maxLength: 0
cover_image:
type: string
format: uri
nullable: true
capacity:
type: integer
title: Capacity Limit
registration_count:
type: integer
title: Current Registrations
is_active:
type: boolean
is_featured:
type: boolean
language:
$ref: '#/components/schemas/CMSPostLanguageEnum'
tags: {}
organizer:
allOf:
- $ref: '#/components/schemas/EventOrganizerMinimal'
readOnly: true
is_registered:
type: boolean
readOnly: true
my_registration:
type: object
additionalProperties: {}
nullable: true
readOnly: true
created_at:
type: string
format: date-time
readOnly: true
updated_at:
type: string
format: date-time
readOnly: true
required:
- created_at
- description
- event_date
- id
- is_registered
- my_registration
- organizer
- start_time
- title
- updated_at
EventList:
type: object
properties:
id:
type: integer
readOnly: true
title:
type: string
title: Event Title
maxLength: 255
slug:
oneOf:
- type: string
maxLength: 280
pattern: ^[-a-zA-Z0-9_]+$
- type: string
maxLength: 0
category:
$ref: '#/components/schemas/CategoryEnum'
event_date:
type: string
format: date
start_time:
type: string
format: time
end_time:
type: string
format: time
nullable: true
speaker_name:
type: string
maxLength: 255
speaker_title:
type: string
title: Speaker Title / Affiliation
maxLength: 255
speaker_avatar:
type: string
format: uri
nullable: true
location_type:
$ref: '#/components/schemas/LocationTypeEnum'
venue_address:
type: string
maxLength: 500
cover_image:
type: string
format: uri
nullable: true
capacity:
type: integer
title: Capacity Limit
registration_count:
type: integer
title: Current Registrations
is_active:
type: boolean
is_featured:
type: boolean
language:
$ref: '#/components/schemas/CMSPostLanguageEnum'
tags: {}
organizer:
allOf:
- $ref: '#/components/schemas/EventOrganizerMinimal'
readOnly: true
created_at:
type: string
format: date-time
readOnly: true
required:
- created_at
- event_date
- id
- organizer
- start_time
- title
EventOrganizerMinimal:
type: object
properties:
id:
type: integer
readOnly: true
name:
type: string
title: Institution Name
description: Official name of the mosque, center, or institute.
maxLength: 255
slug:
nullable: true
title: Slug / URL Identifier
oneOf:
- type: string
pattern: ^[-\w]+$
maxLength: 255
- type: string
maxLength: 0
type:
allOf:
- $ref: '#/components/schemas/TypeEnum'
title: Institution Type
city:
type: string
maxLength: 255
country:
type: string
maxLength: 255
avatar:
type: string
format: uri
nullable: true
title: Logo / Avatar
verification_status:
$ref: '#/components/schemas/VerificationStatusEnum'
required:
- city
- country
- id
- name
EventParticipantUser:
type: object
properties:
id:
type: integer
readOnly: true
email:
nullable: true
title: Email Address
description: User primary email address.
oneOf:
- type: string
format: email
maxLength: 254
- type: string
maxLength: 0
fullname:
type: string
nullable: true
title: Full Name
description: Full name of the user.
maxLength: 255
avatar:
type: string
format: uri
nullable: true
required:
- id
EventRegisterInputRequest:
type: object
properties:
notes:
type: string
default: ''
EventRegistration:
type: object
properties:
id:
type: integer
readOnly: true
event:
type: integer
readOnly: true
user:
allOf:
- $ref: '#/components/schemas/EventParticipantUser'
readOnly: true
status:
$ref: '#/components/schemas/EventRegistrationStatusEnum'
notes:
type: string
title: Participant Notes
registered_at:
type: string
format: date-time
readOnly: true
required:
- event
- id
- registered_at
- user
EventRegistrationStatusEnum:
enum:
- registered
- attended
- cancelled
type: string
description: |-
* `registered` - Registered
* `attended` - Attended
* `cancelled` - Cancelled
ExchangeToken:
type: object
properties:
temp_token:
type: string
maxLength: 128
required:
- temp_token
ExchangeTokenRequest:
type: object
properties:
temp_token:
type: string
minLength: 1
maxLength: 128
required:
- temp_token
FAQItem:
type: object
properties:
question:
type: string
default: ''
answer:
type: string
default: ''
FAQItemRequest:
type: object
properties:
question:
type: string
default: ''
answer:
type: string
default: ''
FollowResponse:
type: object
properties:
is_following:
type: boolean
follower_count:
type: integer
message:
type: string
required:
- follower_count
- is_following
- message
FollowResponseRequest:
type: object
properties:
is_following:
type: boolean
follower_count:
type: integer
message:
type: string
minLength: 1
required:
- follower_count
- is_following
- message
GenderEnum:
enum:
- male
- female
- other
type: string
description: |-
* `male` - Male
* `female` - Female
* `other` - Other
HealthCheckResponse:
type: object
properties:
status:
type: string
default: healthy
timestamp:
type: string
format: date-time
version:
type: string
default: 1.0.0
required:
- timestamp
InstitutionCreateUpdateRequest:
type: object
properties:
name:
type: string
minLength: 1
title: Institution Name
description: Official name of the mosque, center, or institute.
maxLength: 255
type:
allOf:
- $ref: '#/components/schemas/TypeEnum'
title: Institution Type
country:
type: string
minLength: 1
maxLength: 255
city:
type: string
minLength: 1
maxLength: 255
address:
type: string
nullable: true
title: Full Address
latitude:
type: number
format: double
nullable: true
longitude:
type: number
format: double
nullable: true
description:
type: string
nullable: true
title: Description & Background
website:
nullable: true
oneOf:
- type: string
format: uri
maxLength: 500
- type: string
maxLength: 0
email:
nullable: true
title: Official Email
oneOf:
- type: string
format: email
maxLength: 254
- type: string
maxLength: 0
phone:
type: string
nullable: true
title: Official Phone
maxLength: 50
established_year:
type: integer
nullable: true
title: Established Year (CE)
cover_image:
type: string
format: binary
nullable: true
avatar:
type: string
format: binary
nullable: true
title: Logo / Avatar
social_media:
title: Social Media Links
description: 'Dictionary with keys: facebook, twitter, instagram, linkedin,
youtube, telegram'
working_hours:
title: Working Hours / Prayer Times Schedule
tags:
title: Tags & Specializations
is_featured:
type: boolean
required:
- city
- country
- name
InstitutionDetail:
type: object
properties:
id:
type: integer
readOnly: true
name:
type: string
title: Institution Name
description: Official name of the mosque, center, or institute.
maxLength: 255
slug:
type: string
readOnly: true
nullable: true
title: Slug / URL Identifier
pattern: ^[-\w]+$
type:
allOf:
- $ref: '#/components/schemas/TypeEnum'
title: Institution Type
type_display:
type: string
readOnly: true
country:
type: string
maxLength: 255
city:
type: string
maxLength: 255
address:
type: string
nullable: true
title: Full Address
latitude:
type: number
format: double
nullable: true
longitude:
type: number
format: double
nullable: true
description:
type: string
nullable: true
title: Description & Background
website:
nullable: true
oneOf:
- type: string
format: uri
maxLength: 500
- type: string
maxLength: 0
email:
nullable: true
title: Official Email
oneOf:
- type: string
format: email
maxLength: 254
- type: string
maxLength: 0
phone:
type: string
nullable: true
title: Official Phone
maxLength: 50
established_year:
type: integer
nullable: true
title: Established Year (CE)
cover_image:
type: string
format: uri
nullable: true
avatar:
type: string
format: uri
nullable: true
title: Logo / Avatar
social_media:
title: Social Media Links
description: 'Dictionary with keys: facebook, twitter, instagram, linkedin,
youtube, telegram'
working_hours:
title: Working Hours / Prayer Times Schedule
tags:
title: Tags & Specializations
verification_status:
allOf:
- $ref: '#/components/schemas/VerificationStatusEnum'
readOnly: true
verification_status_display:
type: string
readOnly: true
follower_count:
type: integer
readOnly: true
title: Followers Count
is_featured:
type: boolean
readOnly: true
is_active:
type: boolean
readOnly: true
created_by_email:
type: string
format: email
readOnly: true
nullable: true
members_count:
type: integer
readOnly: true
is_following:
type: boolean
readOnly: true
user_role:
type: string
nullable: true
readOnly: true
timeline_entries:
type: array
items:
$ref: '#/components/schemas/InstitutionTimeline'
readOnly: true
media_items:
type: array
items:
$ref: '#/components/schemas/InstitutionMedia'
readOnly: true
created_at:
type: string
format: date-time
readOnly: true
updated_at:
type: string
format: date-time
readOnly: true
required:
- city
- country
- created_at
- created_by_email
- follower_count
- id
- is_active
- is_featured
- is_following
- media_items
- members_count
- name
- slug
- timeline_entries
- type_display
- updated_at
- user_role
- verification_status
- verification_status_display
InstitutionList:
type: object
properties:
id:
type: integer
readOnly: true
name:
type: string
readOnly: true
title: Institution Name
description: Official name of the mosque, center, or institute.
slug:
type: string
readOnly: true
nullable: true
title: Slug / URL Identifier
pattern: ^[-\w]+$
type:
allOf:
- $ref: '#/components/schemas/TypeEnum'
readOnly: true
title: Institution Type
type_display:
type: string
readOnly: true
country:
type: string
readOnly: true
city:
type: string
readOnly: true
address:
type: string
readOnly: true
nullable: true
title: Full Address
latitude:
type: number
format: double
readOnly: true
nullable: true
longitude:
type: number
format: double
readOnly: true
nullable: true
avatar:
type: string
format: uri
nullable: true
readOnly: true
title: Logo / Avatar
cover_image:
type: string
format: uri
nullable: true
readOnly: true
verification_status:
allOf:
- $ref: '#/components/schemas/VerificationStatusEnum'
readOnly: true
verification_status_display:
type: string
readOnly: true
follower_count:
type: integer
readOnly: true
title: Followers Count
is_featured:
type: boolean
readOnly: true
tags:
readOnly: true
title: Tags & Specializations
is_following:
type: boolean
readOnly: true
created_at:
type: string
format: date-time
readOnly: true
required:
- address
- avatar
- city
- country
- cover_image
- created_at
- follower_count
- id
- is_featured
- is_following
- latitude
- longitude
- name
- slug
- tags
- type
- type_display
- verification_status
- verification_status_display
InstitutionMedia:
type: object
properties:
id:
type: integer
readOnly: true
institution:
type: integer
readOnly: true
file:
type: string
format: uri
title: Media File
media_type:
$ref: '#/components/schemas/InstitutionMediaMediaTypeEnum'
media_type_display:
type: string
readOnly: true
title:
type: string
nullable: true
title: Media Title
maxLength: 255
caption:
type: string
nullable: true
title: Caption / Notes
uploaded_at:
type: string
format: date-time
readOnly: true
required:
- file
- id
- institution
- media_type_display
- uploaded_at
InstitutionMediaMediaTypeEnum:
enum:
- image
- video
- document
type: string
description: |-
* `image` - Image
* `video` - Video
* `document` - Document / Publication
InstitutionMediaRequest:
type: object
properties:
file:
type: string
format: binary
title: Media File
media_type:
$ref: '#/components/schemas/InstitutionMediaMediaTypeEnum'
title:
type: string
nullable: true
title: Media Title
maxLength: 255
caption:
type: string
nullable: true
title: Caption / Notes
required:
- file
InstitutionMeetingMinimal:
type: object
properties:
id:
type: integer
readOnly: true
name:
type: string
title: Institution Name
description: Official name of the mosque, center, or institute.
maxLength: 255
slug:
nullable: true
title: Slug / URL Identifier
oneOf:
- type: string
pattern: ^[-\w]+$
maxLength: 255
- type: string
maxLength: 0
type:
allOf:
- $ref: '#/components/schemas/TypeEnum'
title: Institution Type
avatar:
type: string
format: uri
nullable: true
title: Logo / Avatar
city:
type: string
maxLength: 255
country:
type: string
maxLength: 255
required:
- city
- country
- id
- name
InstitutionMember:
type: object
properties:
id:
type: integer
readOnly: true
institution:
type: integer
readOnly: true
user:
allOf:
- $ref: '#/components/schemas/MemberUserMini'
readOnly: true
role:
$ref: '#/components/schemas/RoleEnum'
role_display:
type: string
readOnly: true
title:
type: string
nullable: true
title: Organizational Title
description: e.g., Director, Media Manager, Cultural Affairs Officer
maxLength: 150
joined_at:
type: string
format: date-time
readOnly: true
required:
- id
- institution
- joined_at
- role_display
- user
InstitutionMemberAddRequest:
type: object
properties:
email:
type: string
format: email
minLength: 1
role:
allOf:
- $ref: '#/components/schemas/RoleEnum'
default: viewer
title:
type: string
maxLength: 150
required:
- email
InstitutionTimeline:
type: object
properties:
id:
type: integer
readOnly: true
institution:
type: integer
readOnly: true
year:
type: string
title: Year / Period
description: e.g. 1995, 1416 AH, or 2020-Present
maxLength: 50
title:
type: string
title: Milestone Title
maxLength: 255
description:
type: string
nullable: true
title: Milestone Description
order:
type: integer
title: Display Order
created_at:
type: string
format: date-time
readOnly: true
required:
- created_at
- id
- institution
- title
- year
InstitutionTimelineRequest:
type: object
properties:
year:
type: string
minLength: 1
title: Year / Period
description: e.g. 1995, 1416 AH, or 2020-Present
maxLength: 50
title:
type: string
minLength: 1
title: Milestone Title
maxLength: 255
description:
type: string
nullable: true
title: Milestone Description
order:
type: integer
title: Display Order
required:
- title
- year
KanbanColumn:
type: object
properties:
id:
type: integer
readOnly: true
project:
type: integer
readOnly: true
name:
type: string
title: Column Name
maxLength: 100
code:
type: string
title: Column Code Identifier
maxLength: 50
order:
type: integer
title: Display Order
color:
type: string
nullable: true
title: Badge / Header Color
maxLength: 20
tasks:
type: array
items:
$ref: '#/components/schemas/KanbanTask'
readOnly: true
required:
- id
- name
- project
- tasks
KanbanTask:
type: object
properties:
id:
type: integer
readOnly: true
project:
type: integer
readOnly: true
column:
type: integer
title: Kanban Column
column_name:
type: string
readOnly: true
column_code:
type: string
readOnly: true
title:
type: string
title: Task Title
maxLength: 255
description:
type: string
nullable: true
title: Task Description
priority:
$ref: '#/components/schemas/PriorityEnum'
priority_display:
type: string
readOnly: true
assignee:
allOf:
- $ref: '#/components/schemas/ProjectUserMini'
readOnly: true
due_date:
type: string
format: date
nullable: true
labels:
title: Task Labels
order:
type: integer
title: Display Order within Column
created_at:
type: string
format: date-time
readOnly: true
updated_at:
type: string
format: date-time
readOnly: true
required:
- assignee
- column
- column_code
- column_name
- created_at
- id
- priority_display
- project
- title
- updated_at
KanbanTaskCreateUpdateRequest:
type: object
properties:
column:
type: integer
title: Kanban Column
title:
type: string
minLength: 1
title: Task Title
maxLength: 255
description:
type: string
nullable: true
title: Task Description
priority:
$ref: '#/components/schemas/PriorityEnum'
assignee:
type: integer
nullable: true
title: Assignee User
due_date:
type: string
format: date
nullable: true
labels:
title: Task Labels
order:
type: integer
title: Display Order within Column
required:
- column
- title
LocationHistory:
type: object
properties:
id:
type: integer
readOnly: true
lat:
type: number
format: double
nullable: true
title: Latitude
lon:
type: number
format: double
nullable: true
title: Longitude
country:
type: string
nullable: true
maxLength: 255
city:
type: string
nullable: true
maxLength: 255
selected_manually:
type: boolean
ip:
type: string
nullable: true
title: IP Address
maxLength: 255
timezone:
type: string
nullable: true
maxLength: 60
required:
- id
LocationHistoryRequest:
type: object
properties:
lat:
type: number
format: double
nullable: true
title: Latitude
lon:
type: number
format: double
nullable: true
title: Longitude
country:
type: string
nullable: true
maxLength: 255
city:
type: string
nullable: true
maxLength: 255
selected_manually:
type: boolean
ip:
type: string
nullable: true
title: IP Address
maxLength: 255
timezone:
type: string
nullable: true
maxLength: 60
LocationTypeEnum:
enum:
- in_person
- online
- hybrid
type: string
description: |-
* `in_person` - In Person
* `online` - Online
* `hybrid` - Hybrid
MapClusterItem:
type: object
properties:
is_cluster:
type: boolean
id:
type: integer
nullable: true
name:
type: string
nullable: true
slug:
type: string
nullable: true
type:
type: string
nullable: true
type_display:
type: string
nullable: true
city:
type: string
nullable: true
country:
type: string
nullable: true
avatar:
type: string
nullable: true
cover_image:
type: string
nullable: true
is_featured:
type: boolean
verification_status:
type: string
nullable: true
follower_count:
type: integer
cluster_id:
type: string
count:
type: integer
lat:
type: number
format: double
lng:
type: number
format: double
type_breakdown:
type: object
additionalProperties: {}
preview_institutions:
type: array
items: {}
required:
- is_cluster
- lat
- lng
MapStats:
type: object
properties:
total_institutions:
type: integer
total_countries:
type: integer
total_cities:
type: integer
type_distribution:
type: object
additionalProperties: {}
verified_count:
type: integer
featured_count:
type: integer
required:
- featured_count
- total_cities
- total_countries
- total_institutions
- type_distribution
- verified_count
MediaAsset:
type: object
properties:
id:
type: integer
readOnly: true
file:
type: string
format: uri
title: Media File
title:
type: string
nullable: true
title: Title / Description
maxLength: 255
media_type:
$ref: '#/components/schemas/MediaAssetMediaTypeEnum'
media_type_display:
type: string
readOnly: true
file_size:
type: integer
readOnly: true
title: File Size (Bytes)
dimensions:
type: string
nullable: true
title: Dimensions (WxH)
maxLength: 50
uploaded_by_email:
type: string
format: email
readOnly: true
nullable: true
created_at:
type: string
format: date-time
readOnly: true
required:
- created_at
- file
- file_size
- id
- media_type_display
- uploaded_by_email
MediaAssetMediaTypeEnum:
enum:
- image
- video
- audio
- document
type: string
description: |-
* `image` - Image
* `video` - Video
* `audio` - Audio
* `document` - Document / PDF
MediaAssetRequest:
type: object
properties:
file:
type: string
format: binary
title: Media File
title:
type: string
nullable: true
title: Title / Description
maxLength: 255
media_type:
$ref: '#/components/schemas/MediaAssetMediaTypeEnum'
dimensions:
type: string
nullable: true
title: Dimensions (WxH)
maxLength: 50
required:
- file
MeetingCreateRequest:
type: object
properties:
title:
type: string
minLength: 1
title: Meeting Title / Subject
maxLength: 255
requester_institution_id:
type: integer
writeOnly: true
recipient_institution_id:
type: integer
writeOnly: true
meeting_date:
type: string
format: date
title: Proposed / Confirmed Date
meeting_time:
type: string
format: time
title: Proposed / Confirmed Time
duration_minutes:
type: integer
title: Duration (Minutes)
meeting_url:
title: Video Meeting Link
oneOf:
- type: string
format: uri
maxLength: 500
- type: string
maxLength: 0
agenda:
type: string
title: Meeting Agenda & Topics
required:
- meeting_date
- meeting_time
- recipient_institution_id
- requester_institution_id
- title
MeetingDetail:
type: object
properties:
id:
type: integer
readOnly: true
title:
type: string
title: Meeting Title / Subject
maxLength: 255
requester_institution:
allOf:
- $ref: '#/components/schemas/InstitutionMeetingMinimal'
readOnly: true
recipient_institution:
allOf:
- $ref: '#/components/schemas/InstitutionMeetingMinimal'
readOnly: true
created_by:
allOf:
- $ref: '#/components/schemas/MeetingUser'
readOnly: true
status:
$ref: '#/components/schemas/MeetingStatusEnum'
meeting_date:
type: string
format: date
title: Proposed / Confirmed Date
meeting_time:
type: string
format: time
title: Proposed / Confirmed Time
duration_minutes:
type: integer
title: Duration (Minutes)
meeting_url:
title: Video Meeting Link
oneOf:
- type: string
format: uri
maxLength: 500
- type: string
maxLength: 0
agenda:
type: string
title: Meeting Agenda & Topics
admin_notes:
type: string
title: Internal / Admin Notes
created_at:
type: string
format: date-time
readOnly: true
updated_at:
type: string
format: date-time
readOnly: true
required:
- created_at
- created_by
- id
- meeting_date
- meeting_time
- recipient_institution
- requester_institution
- title
- updated_at
MeetingList:
type: object
properties:
id:
type: integer
readOnly: true
title:
type: string
title: Meeting Title / Subject
maxLength: 255
requester_institution:
allOf:
- $ref: '#/components/schemas/InstitutionMeetingMinimal'
readOnly: true
recipient_institution:
allOf:
- $ref: '#/components/schemas/InstitutionMeetingMinimal'
readOnly: true
created_by:
allOf:
- $ref: '#/components/schemas/MeetingUser'
readOnly: true
status:
$ref: '#/components/schemas/MeetingStatusEnum'
meeting_date:
type: string
format: date
title: Proposed / Confirmed Date
meeting_time:
type: string
format: time
title: Proposed / Confirmed Time
duration_minutes:
type: integer
title: Duration (Minutes)
meeting_url:
title: Video Meeting Link
oneOf:
- type: string
format: uri
maxLength: 500
- type: string
maxLength: 0
created_at:
type: string
format: date-time
readOnly: true
required:
- created_at
- created_by
- id
- meeting_date
- meeting_time
- recipient_institution
- requester_institution
- title
MeetingStatusEnum:
enum:
- pending
- scheduled
- completed
- cancelled
- declined
type: string
description: |-
* `pending` - Pending
* `scheduled` - Scheduled
* `completed` - Completed
* `cancelled` - Cancelled
* `declined` - Declined
MeetingUpdate:
type: object
properties:
status:
$ref: '#/components/schemas/MeetingStatusEnum'
meeting_date:
type: string
format: date
title: Proposed / Confirmed Date
meeting_time:
type: string
format: time
title: Proposed / Confirmed Time
duration_minutes:
type: integer
title: Duration (Minutes)
meeting_url:
title: Video Meeting Link
oneOf:
- type: string
format: uri
maxLength: 500
- type: string
maxLength: 0
agenda:
type: string
title: Meeting Agenda & Topics
admin_notes:
type: string
title: Internal / Admin Notes
required:
- meeting_date
- meeting_time
MeetingUpdateRequest:
type: object
properties:
status:
$ref: '#/components/schemas/MeetingStatusEnum'
meeting_date:
type: string
format: date
title: Proposed / Confirmed Date
meeting_time:
type: string
format: time
title: Proposed / Confirmed Time
duration_minutes:
type: integer
title: Duration (Minutes)
meeting_url:
title: Video Meeting Link
oneOf:
- type: string
format: uri
maxLength: 500
- type: string
maxLength: 0
agenda:
type: string
title: Meeting Agenda & Topics
admin_notes:
type: string
title: Internal / Admin Notes
required:
- meeting_date
- meeting_time
MeetingUser:
type: object
properties:
id:
type: integer
readOnly: true
email:
nullable: true
title: Email Address
description: User primary email address.
oneOf:
- type: string
format: email
maxLength: 254
- type: string
maxLength: 0
fullname:
type: string
nullable: true
title: Full Name
description: Full name of the user.
maxLength: 255
avatar:
type: string
format: uri
nullable: true
required:
- id
MemberUserMini:
type: object
properties:
id:
type: integer
readOnly: true
email:
type: string
format: email
readOnly: true
nullable: true
title: Email Address
description: User primary email address.
fullname:
type: string
readOnly: true
nullable: true
title: Full Name
description: Full name of the user.
avatar:
type: string
format: uri
nullable: true
readOnly: true
phone_number:
type: string
readOnly: true
nullable: true
description: e.g., +1 555 1234567
required:
- avatar
- email
- fullname
- id
- phone_number
Notification:
type: object
properties:
id:
type: integer
readOnly: true
title:
type: string
maxLength: 255
message:
type: string
maxLength: 1024
is_read:
type: boolean
notification_type:
type: string
nullable: true
maxLength: 50
action:
type: string
maxLength: 50
navigate_to:
type: string
nullable: true
maxLength: 255
created_at:
type: string
format: date-time
readOnly: true
updated_at:
type: string
format: date-time
readOnly: true
required:
- created_at
- id
- message
- title
- updated_at
NotificationTemplate:
type: object
properties:
id:
type: integer
readOnly: true
notification_type:
type: string
maxLength: 50
name:
type: string
maxLength: 100
is_active:
type: boolean
title:
type: string
maxLength: 255
body:
type: string
maxLength: 1024
placeholders_info:
type: string
nullable: true
title: Allowed Placeholders Description
maxLength: 255
required:
- id
- name
- notification_type
NotificationTemplateRequest:
type: object
properties:
notification_type:
type: string
minLength: 1
maxLength: 50
name:
type: string
minLength: 1
maxLength: 100
is_active:
type: boolean
title:
type: string
minLength: 1
maxLength: 255
body:
type: string
minLength: 1
maxLength: 1024
placeholders_info:
type: string
nullable: true
title: Allowed Placeholders Description
maxLength: 255
required:
- name
- notification_type
NullEnum:
enum:
- null
PaginatedAdminNotificationList:
type: object
required:
- count
- results
properties:
count:
type: integer
example: 123
next:
type: string
nullable: true
format: uri
example: http://api.example.org/accounts/?page=4
previous:
type: string
nullable: true
format: uri
example: http://api.example.org/accounts/?page=2
results:
type: array
items:
$ref: '#/components/schemas/AdminNotification'
PaginatedAdminUserList:
type: object
required:
- count
- results
properties:
count:
type: integer
example: 123
next:
type: string
nullable: true
format: uri
example: http://api.example.org/accounts/?page=4
previous:
type: string
nullable: true
format: uri
example: http://api.example.org/accounts/?page=2
results:
type: array
items:
$ref: '#/components/schemas/AdminUser'
PaginatedChatMessageList:
type: object
required:
- count
- results
properties:
count:
type: integer
example: 123
next:
type: string
nullable: true
format: uri
example: http://api.example.org/accounts/?page=4
previous:
type: string
nullable: true
format: uri
example: http://api.example.org/accounts/?page=2
results:
type: array
items:
$ref: '#/components/schemas/ChatMessage'
PaginatedChatRoomListList:
type: object
required:
- count
- results
properties:
count:
type: integer
example: 123
next:
type: string
nullable: true
format: uri
example: http://api.example.org/accounts/?page=4
previous:
type: string
nullable: true
format: uri
example: http://api.example.org/accounts/?page=2
results:
type: array
items:
$ref: '#/components/schemas/ChatRoomList'
PaginatedEventCalendarItemList:
type: object
required:
- count
- results
properties:
count:
type: integer
example: 123
next:
type: string
nullable: true
format: uri
example: http://api.example.org/accounts/?page=4
previous:
type: string
nullable: true
format: uri
example: http://api.example.org/accounts/?page=2
results:
type: array
items:
$ref: '#/components/schemas/EventCalendarItem'
PaginatedEventListList:
type: object
required:
- count
- results
properties:
count:
type: integer
example: 123
next:
type: string
nullable: true
format: uri
example: http://api.example.org/accounts/?page=4
previous:
type: string
nullable: true
format: uri
example: http://api.example.org/accounts/?page=2
results:
type: array
items:
$ref: '#/components/schemas/EventList'
PaginatedEventRegistrationList:
type: object
required:
- count
- results
properties:
count:
type: integer
example: 123
next:
type: string
nullable: true
format: uri
example: http://api.example.org/accounts/?page=4
previous:
type: string
nullable: true
format: uri
example: http://api.example.org/accounts/?page=2
results:
type: array
items:
$ref: '#/components/schemas/EventRegistration'
PaginatedInstitutionListList:
type: object
required:
- count
- results
properties:
count:
type: integer
example: 123
next:
type: string
nullable: true
format: uri
example: http://api.example.org/accounts/?page=4
previous:
type: string
nullable: true
format: uri
example: http://api.example.org/accounts/?page=2
results:
type: array
items:
$ref: '#/components/schemas/InstitutionList'
PaginatedInstitutionMediaList:
type: object
required:
- count
- results
properties:
count:
type: integer
example: 123
next:
type: string
nullable: true
format: uri
example: http://api.example.org/accounts/?page=4
previous:
type: string
nullable: true
format: uri
example: http://api.example.org/accounts/?page=2
results:
type: array
items:
$ref: '#/components/schemas/InstitutionMedia'
PaginatedInstitutionMemberList:
type: object
required:
- count
- results
properties:
count:
type: integer
example: 123
next:
type: string
nullable: true
format: uri
example: http://api.example.org/accounts/?page=4
previous:
type: string
nullable: true
format: uri
example: http://api.example.org/accounts/?page=2
results:
type: array
items:
$ref: '#/components/schemas/InstitutionMember'
PaginatedInstitutionTimelineList:
type: object
required:
- count
- results
properties:
count:
type: integer
example: 123
next:
type: string
nullable: true
format: uri
example: http://api.example.org/accounts/?page=4
previous:
type: string
nullable: true
format: uri
example: http://api.example.org/accounts/?page=2
results:
type: array
items:
$ref: '#/components/schemas/InstitutionTimeline'
PaginatedKanbanColumnList:
type: object
required:
- count
- results
properties:
count:
type: integer
example: 123
next:
type: string
nullable: true
format: uri
example: http://api.example.org/accounts/?page=4
previous:
type: string
nullable: true
format: uri
example: http://api.example.org/accounts/?page=2
results:
type: array
items:
$ref: '#/components/schemas/KanbanColumn'
PaginatedMapClusterItemList:
type: object
required:
- count
- results
properties:
count:
type: integer
example: 123
next:
type: string
nullable: true
format: uri
example: http://api.example.org/accounts/?page=4
previous:
type: string
nullable: true
format: uri
example: http://api.example.org/accounts/?page=2
results:
type: array
items:
$ref: '#/components/schemas/MapClusterItem'
PaginatedMediaAssetList:
type: object
required:
- count
- results
properties:
count:
type: integer
example: 123
next:
type: string
nullable: true
format: uri
example: http://api.example.org/accounts/?page=4
previous:
type: string
nullable: true
format: uri
example: http://api.example.org/accounts/?page=2
results:
type: array
items:
$ref: '#/components/schemas/MediaAsset'
PaginatedMeetingListList:
type: object
required:
- count
- results
properties:
count:
type: integer
example: 123
next:
type: string
nullable: true
format: uri
example: http://api.example.org/accounts/?page=4
previous:
type: string
nullable: true
format: uri
example: http://api.example.org/accounts/?page=2
results:
type: array
items:
$ref: '#/components/schemas/MeetingList'
PaginatedNotificationList:
type: object
required:
- count
- results
properties:
count:
type: integer
example: 123
next:
type: string
nullable: true
format: uri
example: http://api.example.org/accounts/?page=4
previous:
type: string
nullable: true
format: uri
example: http://api.example.org/accounts/?page=2
results:
type: array
items:
$ref: '#/components/schemas/Notification'
PaginatedNotificationTemplateList:
type: object
required:
- count
- results
properties:
count:
type: integer
example: 123
next:
type: string
nullable: true
format: uri
example: http://api.example.org/accounts/?page=4
previous:
type: string
nullable: true
format: uri
example: http://api.example.org/accounts/?page=2
results:
type: array
items:
$ref: '#/components/schemas/NotificationTemplate'
PaginatedPostCategoryList:
type: object
required:
- count
- results
properties:
count:
type: integer
example: 123
next:
type: string
nullable: true
format: uri
example: http://api.example.org/accounts/?page=4
previous:
type: string
nullable: true
format: uri
example: http://api.example.org/accounts/?page=2
results:
type: array
items:
$ref: '#/components/schemas/PostCategory'
PaginatedPostCommentList:
type: object
required:
- count
- results
properties:
count:
type: integer
example: 123
next:
type: string
nullable: true
format: uri
example: http://api.example.org/accounts/?page=4
previous:
type: string
nullable: true
format: uri
example: http://api.example.org/accounts/?page=2
results:
type: array
items:
$ref: '#/components/schemas/PostComment'
PaginatedPostListList:
type: object
required:
- count
- results
properties:
count:
type: integer
example: 123
next:
type: string
nullable: true
format: uri
example: http://api.example.org/accounts/?page=4
previous:
type: string
nullable: true
format: uri
example: http://api.example.org/accounts/?page=2
results:
type: array
items:
$ref: '#/components/schemas/PostList'
PaginatedPostTagList:
type: object
required:
- count
- results
properties:
count:
type: integer
example: 123
next:
type: string
nullable: true
format: uri
example: http://api.example.org/accounts/?page=4
previous:
type: string
nullable: true
format: uri
example: http://api.example.org/accounts/?page=2
results:
type: array
items:
$ref: '#/components/schemas/PostTag'
PaginatedProjectDocumentList:
type: object
required:
- count
- results
properties:
count:
type: integer
example: 123
next:
type: string
nullable: true
format: uri
example: http://api.example.org/accounts/?page=4
previous:
type: string
nullable: true
format: uri
example: http://api.example.org/accounts/?page=2
results:
type: array
items:
$ref: '#/components/schemas/ProjectDocument'
PaginatedProjectListList:
type: object
required:
- count
- results
properties:
count:
type: integer
example: 123
next:
type: string
nullable: true
format: uri
example: http://api.example.org/accounts/?page=4
previous:
type: string
nullable: true
format: uri
example: http://api.example.org/accounts/?page=2
results:
type: array
items:
$ref: '#/components/schemas/ProjectList'
PaginatedRegionalDensityList:
type: object
required:
- count
- results
properties:
count:
type: integer
example: 123
next:
type: string
nullable: true
format: uri
example: http://api.example.org/accounts/?page=4
previous:
type: string
nullable: true
format: uri
example: http://api.example.org/accounts/?page=2
results:
type: array
items:
$ref: '#/components/schemas/RegionalDensity'
PaginatedVerificationDocumentList:
type: object
required:
- count
- results
properties:
count:
type: integer
example: 123
next:
type: string
nullable: true
format: uri
example: http://api.example.org/accounts/?page=4
previous:
type: string
nullable: true
format: uri
example: http://api.example.org/accounts/?page=2
results:
type: array
items:
$ref: '#/components/schemas/VerificationDocument'
PasswordRecoverRequestRequest:
type: object
properties:
email:
type: string
format: email
minLength: 1
required:
- email
PasswordResetRequestRequest:
type: object
properties:
email:
type: string
format: email
minLength: 1
token:
type: string
minLength: 1
new_password:
type: string
minLength: 6
required:
- email
- new_password
- token
PatchedAdminNotificationRequest:
type: object
properties:
title:
type: string
minLength: 1
maxLength: 255
message:
type: string
minLength: 1
maxLength: 1024
is_read:
type: boolean
notification_type:
type: string
nullable: true
maxLength: 50
action:
type: string
minLength: 1
maxLength: 50
navigate_to:
type: string
nullable: true
maxLength: 255
PatchedAdminUserRequest:
type: object
properties:
fullname:
type: string
nullable: true
title: Full Name
description: Full name of the user.
maxLength: 255
email:
type: string
format: email
minLength: 1
phone_number:
type: string
nullable: true
description: e.g., +1 555 1234567
maxLength: 128
password:
type: string
writeOnly: true
minLength: 1
avatar:
type: string
nullable: true
minLength: 1
gender:
nullable: true
oneOf:
- $ref: '#/components/schemas/GenderEnum'
- $ref: '#/components/schemas/BlankEnum'
- $ref: '#/components/schemas/NullEnum'
birthdate:
type: string
format: date
nullable: true
info:
type: string
nullable: true
title: Bio / Info
skill:
type: string
nullable: true
title: Skill / Role
maxLength: 512
city:
type: string
nullable: true
maxLength: 255
country:
type: string
nullable: true
maxLength: 255
fcm:
type: string
nullable: true
title: FCM Token
maxLength: 512
user_type:
$ref: '#/components/schemas/UserTypeEnum'
is_active:
type: boolean
title: Active
description: Designates whether this user should be treated as active.
is_staff:
type: boolean
is_superuser:
type: boolean
title: Superuser status
description: Designates that this user has all permissions without explicitly
assigning them.
PatchedEventCreateUpdateRequest:
type: object
properties:
title:
type: string
minLength: 1
title: Event Title
maxLength: 255
description:
type: string
minLength: 1
title: Event Description
organizer_id:
type: integer
writeOnly: true
category:
$ref: '#/components/schemas/CategoryEnum'
event_date:
type: string
format: date
start_time:
type: string
format: time
end_time:
type: string
format: time
nullable: true
speaker_name:
type: string
maxLength: 255
speaker_title:
type: string
title: Speaker Title / Affiliation
maxLength: 255
speaker_avatar:
type: string
format: binary
nullable: true
location_type:
$ref: '#/components/schemas/LocationTypeEnum'
venue_address:
type: string
maxLength: 500
online_meeting_url:
title: Online Meeting Link
oneOf:
- type: string
format: uri
maxLength: 200
- type: string
maxLength: 0
cover_image:
type: string
format: binary
nullable: true
capacity:
type: integer
title: Capacity Limit
is_active:
type: boolean
is_featured:
type: boolean
language:
$ref: '#/components/schemas/CMSPostLanguageEnum'
tags: {}
PatchedInstitutionCreateUpdateRequest:
type: object
properties:
name:
type: string
minLength: 1
title: Institution Name
description: Official name of the mosque, center, or institute.
maxLength: 255
type:
allOf:
- $ref: '#/components/schemas/TypeEnum'
title: Institution Type
country:
type: string
minLength: 1
maxLength: 255
city:
type: string
minLength: 1
maxLength: 255
address:
type: string
nullable: true
title: Full Address
latitude:
type: number
format: double
nullable: true
longitude:
type: number
format: double
nullable: true
description:
type: string
nullable: true
title: Description & Background
website:
nullable: true
oneOf:
- type: string
format: uri
maxLength: 500
- type: string
maxLength: 0
email:
nullable: true
title: Official Email
oneOf:
- type: string
format: email
maxLength: 254
- type: string
maxLength: 0
phone:
type: string
nullable: true
title: Official Phone
maxLength: 50
established_year:
type: integer
nullable: true
title: Established Year (CE)
cover_image:
type: string
format: binary
nullable: true
avatar:
type: string
format: binary
nullable: true
title: Logo / Avatar
social_media:
title: Social Media Links
description: 'Dictionary with keys: facebook, twitter, instagram, linkedin,
youtube, telegram'
working_hours:
title: Working Hours / Prayer Times Schedule
tags:
title: Tags & Specializations
is_featured:
type: boolean
PatchedKanbanTaskCreateUpdateRequest:
type: object
properties:
column:
type: integer
title: Kanban Column
title:
type: string
minLength: 1
title: Task Title
maxLength: 255
description:
type: string
nullable: true
title: Task Description
priority:
$ref: '#/components/schemas/PriorityEnum'
assignee:
type: integer
nullable: true
title: Assignee User
due_date:
type: string
format: date
nullable: true
labels:
title: Task Labels
order:
type: integer
title: Display Order within Column
PatchedMeetingUpdateRequest:
type: object
properties:
status:
$ref: '#/components/schemas/MeetingStatusEnum'
meeting_date:
type: string
format: date
title: Proposed / Confirmed Date
meeting_time:
type: string
format: time
title: Proposed / Confirmed Time
duration_minutes:
type: integer
title: Duration (Minutes)
meeting_url:
title: Video Meeting Link
oneOf:
- type: string
format: uri
maxLength: 500
- type: string
maxLength: 0
agenda:
type: string
title: Meeting Agenda & Topics
admin_notes:
type: string
title: Internal / Admin Notes
PatchedNotificationTemplateRequest:
type: object
properties:
notification_type:
type: string
minLength: 1
maxLength: 50
name:
type: string
minLength: 1
maxLength: 100
is_active:
type: boolean
title:
type: string
minLength: 1
maxLength: 255
body:
type: string
minLength: 1
maxLength: 1024
placeholders_info:
type: string
nullable: true
title: Allowed Placeholders Description
maxLength: 255
PatchedPostCreateUpdateRequest:
type: object
properties:
title:
type: string
minLength: 1
title: Post Title
maxLength: 255
post_type:
$ref: '#/components/schemas/PostTypeEnum'
category:
type: integer
nullable: true
language:
$ref: '#/components/schemas/CMSPostLanguageEnum'
status:
allOf:
- $ref: '#/components/schemas/CMSPostStatusEnum'
title: Publication Status
institution:
type: integer
nullable: true
title: Associated Institution
author_role_label:
type: string
nullable: true
description: e.g. Senior Researcher, Center Director, Diplomatic Envoy
maxLength: 150
author_custom_avatar:
type: string
format: binary
nullable: true
title: Custom Author Avatar
featured_image:
type: string
format: binary
nullable: true
title: Featured Cover Image
excerpt:
type: string
nullable: true
title: Excerpt / Summary
description: Brief summary for search results and cards.
content:
type: string
minLength: 1
title: Rich Text / Markdown Content
tags: {}
is_featured:
type: boolean
publish_date:
type: string
format: date-time
PatchedProjectCreateUpdateRequest:
type: object
properties:
title:
type: string
minLength: 1
title: Project Title
maxLength: 255
description:
type: string
nullable: true
title: Project Description & Objectives
owner_institution:
type: integer
title: Lead / Owner Institution
collaborating_institutions:
type: array
items:
type: integer
title: Collaborating Institutions
category:
type: string
nullable: true
title: Project Category
description: e.g. Cultural Diplomacy, Educational Academy, Interfaith Dialogue,
Humanitarian Relief
maxLength: 100
status:
allOf:
- $ref: '#/components/schemas/ProjectStatusEnum'
title: Project Status
progress_percentage:
type: integer
title: Progress Percentage (0-100)
budget:
type: string
nullable: true
title: Estimated Budget
description: e.g. $50,000 or €35,000
maxLength: 100
team_size:
type: integer
cover_image:
type: string
format: binary
nullable: true
start_date:
type: string
format: date
nullable: true
estimated_end_date:
type: string
format: date
nullable: true
actual_end_date:
type: string
format: date
nullable: true
title: Actual Completion Date
PatchedUserMeUpdateRequest:
type: object
properties:
fullname:
type: string
nullable: true
title: Full Name
description: Full name of the user.
maxLength: 255
phone_number:
type: string
nullable: true
description: e.g., +1 555 1234567
maxLength: 128
avatar:
type: string
format: binary
nullable: true
bio:
type: string
nullable: true
languages: {}
skills: {}
country:
type: string
nullable: true
maxLength: 255
city:
type: string
nullable: true
maxLength: 255
gender:
nullable: true
oneOf:
- $ref: '#/components/schemas/GenderEnum'
- $ref: '#/components/schemas/BlankEnum'
- $ref: '#/components/schemas/NullEnum'
birthdate:
type: string
format: date
nullable: true
PatchedUserProfileRequest:
type: object
properties:
fcm:
type: string
minLength: 1
description: Firebase Cloud Messaging token.
fullname:
type: string
minLength: 1
avatar:
type: string
nullable: true
minLength: 1
phone_number:
type: string
nullable: true
description: e.g., +1 555 1234567
maxLength: 128
password:
type: string
writeOnly: true
minLength: 1
city:
type: string
nullable: true
maxLength: 255
country:
type: string
nullable: true
maxLength: 255
birthdate:
type: string
format: date
nullable: true
gender:
allOf:
- $ref: '#/components/schemas/GenderEnum'
description: |-
Select the user's gender.
* `male` - Male
* `female` - Female
* `other` - Other
PostAuthorMini:
type: object
properties:
id:
type: integer
readOnly: true
email:
type: string
format: email
readOnly: true
nullable: true
title: Email Address
description: User primary email address.
fullname:
type: string
readOnly: true
nullable: true
title: Full Name
description: Full name of the user.
avatar:
type: string
format: uri
nullable: true
readOnly: true
required:
- avatar
- email
- fullname
- id
PostCategory:
type: object
properties:
id:
type: integer
readOnly: true
name:
type: string
title: Category Name
maxLength: 255
slug:
type: string
readOnly: true
title: Slug / URL Identifier
pattern: ^[-\w]+$
language:
$ref: '#/components/schemas/PostCategoryLanguageEnum'
description:
type: string
nullable: true
title: Category Description
created_at:
type: string
format: date-time
readOnly: true
posts_count:
type: integer
readOnly: true
required:
- created_at
- id
- name
- posts_count
- slug
PostCategoryLanguageEnum:
enum:
- fa
- en
- ar
- ur
- ru
type: string
description: |-
* `fa` - Persian
* `en` - English
* `ar` - Arabic
* `ur` - Urdu
* `ru` - Russian
PostComment:
type: object
properties:
id:
type: integer
readOnly: true
post:
type: integer
readOnly: true
user:
allOf:
- $ref: '#/components/schemas/PostAuthorMini'
readOnly: true
author_name:
type: string
nullable: true
maxLength: 255
author_email:
nullable: true
oneOf:
- type: string
format: email
maxLength: 254
- type: string
maxLength: 0
content:
type: string
title: Comment Content
status:
allOf:
- $ref: '#/components/schemas/CMSCommentStatusEnum'
readOnly: true
title: Moderation Status
status_display:
type: string
readOnly: true
created_at:
type: string
format: date-time
readOnly: true
required:
- content
- created_at
- id
- post
- status
- status_display
- user
PostCommentCreateRequest:
type: object
properties:
content:
type: string
minLength: 1
author_name:
type: string
maxLength: 255
author_email:
oneOf:
- type: string
format: email
- type: string
maxLength: 0
required:
- content
PostCreateUpdateRequest:
type: object
properties:
title:
type: string
minLength: 1
title: Post Title
maxLength: 255
post_type:
$ref: '#/components/schemas/PostTypeEnum'
category:
type: integer
nullable: true
language:
$ref: '#/components/schemas/CMSPostLanguageEnum'
status:
allOf:
- $ref: '#/components/schemas/CMSPostStatusEnum'
title: Publication Status
institution:
type: integer
nullable: true
title: Associated Institution
author_role_label:
type: string
nullable: true
description: e.g. Senior Researcher, Center Director, Diplomatic Envoy
maxLength: 150
author_custom_avatar:
type: string
format: binary
nullable: true
title: Custom Author Avatar
featured_image:
type: string
format: binary
nullable: true
title: Featured Cover Image
excerpt:
type: string
nullable: true
title: Excerpt / Summary
description: Brief summary for search results and cards.
content:
type: string
minLength: 1
title: Rich Text / Markdown Content
tags: {}
is_featured:
type: boolean
publish_date:
type: string
format: date-time
required:
- content
- title
PostDetail:
type: object
properties:
id:
type: integer
readOnly: true
title:
type: string
title: Post Title
maxLength: 255
slug:
type: string
readOnly: true
nullable: true
title: Slug / URL Identifier
pattern: ^[-\w]+$
post_type:
$ref: '#/components/schemas/PostTypeEnum'
post_type_display:
type: string
readOnly: true
category:
allOf:
- $ref: '#/components/schemas/PostCategory'
readOnly: true
language:
$ref: '#/components/schemas/CMSPostLanguageEnum'
status:
allOf:
- $ref: '#/components/schemas/CMSPostStatusEnum'
title: Publication Status
author:
allOf:
- $ref: '#/components/schemas/PostAuthorMini'
readOnly: true
institution:
allOf:
- $ref: '#/components/schemas/PostInstitutionMini'
readOnly: true
author_role_label:
type: string
nullable: true
description: e.g. Senior Researcher, Center Director, Diplomatic Envoy
maxLength: 150
author_custom_avatar:
type: string
format: uri
nullable: true
title: Custom Author Avatar
featured_image:
type: string
format: uri
nullable: true
title: Featured Cover Image
excerpt:
type: string
nullable: true
title: Excerpt / Summary
description: Brief summary for search results and cards.
content:
type: string
title: Rich Text / Markdown Content
tags: {}
reading_time_minutes:
type: integer
readOnly: true
title: Reading Time (Minutes)
views_count:
type: integer
readOnly: true
likes_count:
type: integer
readOnly: true
comments_count:
type: integer
readOnly: true
is_featured:
type: boolean
publish_date:
type: string
format: date-time
is_liked:
type: boolean
readOnly: true
comments:
type: array
items:
$ref: '#/components/schemas/PostComment'
readOnly: true
created_at:
type: string
format: date-time
readOnly: true
updated_at:
type: string
format: date-time
readOnly: true
required:
- author
- category
- comments
- comments_count
- content
- created_at
- id
- institution
- is_liked
- likes_count
- post_type_display
- reading_time_minutes
- slug
- title
- updated_at
- views_count
PostInstitutionMini:
type: object
properties:
id:
type: integer
readOnly: true
name:
type: string
readOnly: true
title: Institution Name
description: Official name of the mosque, center, or institute.
slug:
type: string
readOnly: true
nullable: true
title: Slug / URL Identifier
pattern: ^[-\w]+$
type:
allOf:
- $ref: '#/components/schemas/TypeEnum'
readOnly: true
title: Institution Type
type_display:
type: string
readOnly: true
avatar:
type: string
format: uri
nullable: true
readOnly: true
title: Logo / Avatar
city:
type: string
readOnly: true
country:
type: string
readOnly: true
required:
- avatar
- city
- country
- id
- name
- slug
- type
- type_display
PostLikeResponse:
type: object
properties:
is_liked:
type: boolean
likes_count:
type: integer
message:
type: string
required:
- is_liked
- likes_count
- message
PostLikeResponseRequest:
type: object
properties:
is_liked:
type: boolean
likes_count:
type: integer
message:
type: string
minLength: 1
required:
- is_liked
- likes_count
- message
PostList:
type: object
properties:
id:
type: integer
readOnly: true
title:
type: string
readOnly: true
title: Post Title
slug:
type: string
readOnly: true
nullable: true
title: Slug / URL Identifier
pattern: ^[-\w]+$
post_type:
allOf:
- $ref: '#/components/schemas/PostTypeEnum'
readOnly: true
post_type_display:
type: string
readOnly: true
category:
type: integer
readOnly: true
nullable: true
category_name:
type: string
readOnly: true
nullable: true
language:
allOf:
- $ref: '#/components/schemas/CMSPostLanguageEnum'
readOnly: true
status:
allOf:
- $ref: '#/components/schemas/CMSPostStatusEnum'
readOnly: true
title: Publication Status
author:
allOf:
- $ref: '#/components/schemas/PostAuthorMini'
readOnly: true
institution:
allOf:
- $ref: '#/components/schemas/PostInstitutionMini'
readOnly: true
author_role_label:
type: string
readOnly: true
nullable: true
description: e.g. Senior Researcher, Center Director, Diplomatic Envoy
author_custom_avatar:
type: string
format: uri
nullable: true
readOnly: true
title: Custom Author Avatar
featured_image:
type: string
format: uri
nullable: true
readOnly: true
title: Featured Cover Image
excerpt:
type: string
readOnly: true
nullable: true
title: Excerpt / Summary
description: Brief summary for search results and cards.
tags:
readOnly: true
reading_time_minutes:
type: integer
readOnly: true
title: Reading Time (Minutes)
views_count:
type: integer
readOnly: true
likes_count:
type: integer
readOnly: true
comments_count:
type: integer
readOnly: true
is_featured:
type: boolean
readOnly: true
publish_date:
type: string
format: date-time
readOnly: true
is_liked:
type: boolean
readOnly: true
created_at:
type: string
format: date-time
readOnly: true
required:
- author
- author_custom_avatar
- author_role_label
- category
- category_name
- comments_count
- created_at
- excerpt
- featured_image
- id
- institution
- is_featured
- is_liked
- language
- likes_count
- post_type
- post_type_display
- publish_date
- reading_time_minutes
- slug
- status
- tags
- title
- views_count
PostTag:
type: object
properties:
id:
type: integer
readOnly: true
name:
type: string
title: Tag Name
maxLength: 100
slug:
type: string
readOnly: true
pattern: ^[-\w]+$
required:
- id
- name
- slug
PostTypeEnum:
enum:
- news
- article
- report
- interview
type: string
description: |-
* `news` - News & Announcements
* `article` - Analytical Article
* `report` - Field & Diplomatic Report
* `interview` - Expert Interview
PriorityEnum:
enum:
- low
- medium
- high
- urgent
type: string
description: |-
* `low` - Low
* `medium` - Medium
* `high` - High
* `urgent` - Urgent
ProjectCreateUpdateRequest:
type: object
properties:
title:
type: string
minLength: 1
title: Project Title
maxLength: 255
description:
type: string
nullable: true
title: Project Description & Objectives
owner_institution:
type: integer
title: Lead / Owner Institution
collaborating_institutions:
type: array
items:
type: integer
title: Collaborating Institutions
category:
type: string
nullable: true
title: Project Category
description: e.g. Cultural Diplomacy, Educational Academy, Interfaith Dialogue,
Humanitarian Relief
maxLength: 100
status:
allOf:
- $ref: '#/components/schemas/ProjectStatusEnum'
title: Project Status
progress_percentage:
type: integer
title: Progress Percentage (0-100)
budget:
type: string
nullable: true
title: Estimated Budget
description: e.g. $50,000 or €35,000
maxLength: 100
team_size:
type: integer
cover_image:
type: string
format: binary
nullable: true
start_date:
type: string
format: date
nullable: true
estimated_end_date:
type: string
format: date
nullable: true
actual_end_date:
type: string
format: date
nullable: true
title: Actual Completion Date
required:
- owner_institution
- title
ProjectDetail:
type: object
properties:
id:
type: integer
readOnly: true
title:
type: string
title: Project Title
maxLength: 255
slug:
type: string
readOnly: true
nullable: true
title: Slug / URL Identifier
pattern: ^[-\w]+$
description:
type: string
nullable: true
title: Project Description & Objectives
owner_institution:
allOf:
- $ref: '#/components/schemas/ProjectInstitutionMini'
readOnly: true
collaborating_institutions:
type: array
items:
$ref: '#/components/schemas/ProjectInstitutionMini'
readOnly: true
category:
type: string
nullable: true
title: Project Category
description: e.g. Cultural Diplomacy, Educational Academy, Interfaith Dialogue,
Humanitarian Relief
maxLength: 100
status:
allOf:
- $ref: '#/components/schemas/ProjectStatusEnum'
title: Project Status
status_display:
type: string
readOnly: true
progress_percentage:
type: integer
title: Progress Percentage (0-100)
budget:
type: string
nullable: true
title: Estimated Budget
description: e.g. $50,000 or €35,000
maxLength: 100
team_size:
type: integer
cover_image:
type: string
format: uri
nullable: true
start_date:
type: string
format: date
nullable: true
estimated_end_date:
type: string
format: date
nullable: true
actual_end_date:
type: string
format: date
nullable: true
title: Actual Completion Date
columns:
type: array
items:
$ref: '#/components/schemas/KanbanColumn'
readOnly: true
documents:
type: array
items:
$ref: '#/components/schemas/ProjectDocument'
readOnly: true
can_edit:
type: boolean
readOnly: true
created_by_email:
type: string
format: email
readOnly: true
nullable: true
created_at:
type: string
format: date-time
readOnly: true
updated_at:
type: string
format: date-time
readOnly: true
required:
- can_edit
- collaborating_institutions
- columns
- created_at
- created_by_email
- documents
- id
- owner_institution
- slug
- status_display
- title
- updated_at
ProjectDocument:
type: object
properties:
id:
type: integer
readOnly: true
project:
type: integer
readOnly: true
title:
type: string
title: Document Title
maxLength: 255
file:
type: string
format: uri
title: Document File
doc_type:
allOf:
- $ref: '#/components/schemas/DocTypeEnum'
title: Document Type
doc_type_display:
type: string
readOnly: true
uploaded_by_email:
type: string
format: email
readOnly: true
nullable: true
uploaded_at:
type: string
format: date-time
readOnly: true
required:
- doc_type_display
- file
- id
- project
- title
- uploaded_at
- uploaded_by_email
ProjectDocumentRequest:
type: object
properties:
title:
type: string
minLength: 1
title: Document Title
maxLength: 255
file:
type: string
format: binary
title: Document File
doc_type:
allOf:
- $ref: '#/components/schemas/DocTypeEnum'
title: Document Type
required:
- file
- title
ProjectInstitutionMini:
type: object
properties:
id:
type: integer
readOnly: true
name:
type: string
readOnly: true
title: Institution Name
description: Official name of the mosque, center, or institute.
slug:
type: string
readOnly: true
nullable: true
title: Slug / URL Identifier
pattern: ^[-\w]+$
type:
allOf:
- $ref: '#/components/schemas/TypeEnum'
readOnly: true
title: Institution Type
type_display:
type: string
readOnly: true
avatar:
type: string
format: uri
nullable: true
readOnly: true
title: Logo / Avatar
city:
type: string
readOnly: true
country:
type: string
readOnly: true
required:
- avatar
- city
- country
- id
- name
- slug
- type
- type_display
ProjectList:
type: object
properties:
id:
type: integer
readOnly: true
title:
type: string
readOnly: true
title: Project Title
slug:
type: string
readOnly: true
nullable: true
title: Slug / URL Identifier
pattern: ^[-\w]+$
owner_institution:
allOf:
- $ref: '#/components/schemas/ProjectInstitutionMini'
readOnly: true
collaborating_institutions_count:
type: integer
readOnly: true
category:
type: string
readOnly: true
nullable: true
title: Project Category
description: e.g. Cultural Diplomacy, Educational Academy, Interfaith Dialogue,
Humanitarian Relief
status:
allOf:
- $ref: '#/components/schemas/ProjectStatusEnum'
readOnly: true
title: Project Status
status_display:
type: string
readOnly: true
progress_percentage:
type: integer
readOnly: true
title: Progress Percentage (0-100)
budget:
type: string
readOnly: true
nullable: true
title: Estimated Budget
description: e.g. $50,000 or €35,000
team_size:
type: integer
readOnly: true
cover_image:
type: string
format: uri
nullable: true
readOnly: true
start_date:
type: string
format: date
readOnly: true
nullable: true
estimated_end_date:
type: string
format: date
readOnly: true
nullable: true
tasks_count:
type: integer
readOnly: true
completed_tasks_count:
type: integer
readOnly: true
created_at:
type: string
format: date-time
readOnly: true
required:
- budget
- category
- collaborating_institutions_count
- completed_tasks_count
- cover_image
- created_at
- estimated_end_date
- id
- owner_institution
- progress_percentage
- slug
- start_date
- status
- status_display
- tasks_count
- team_size
- title
ProjectStatusEnum:
enum:
- planning
- active
- on_hold
- completed
type: string
description: |-
* `planning` - Planning
* `active` - Active / In Progress
* `on_hold` - On Hold
* `completed` - Completed
ProjectUserMini:
type: object
properties:
id:
type: integer
readOnly: true
email:
type: string
format: email
readOnly: true
nullable: true
title: Email Address
description: User primary email address.
fullname:
type: string
readOnly: true
nullable: true
title: Full Name
description: Full name of the user.
avatar:
type: string
format: uri
nullable: true
readOnly: true
required:
- avatar
- email
- fullname
- id
RegionInfo:
type: object
properties:
ip:
type: string
nullable: true
browser:
type: string
nullable: true
user_agent:
type: string
required:
- browser
- ip
- user_agent
RegionalDensity:
type: object
properties:
country:
type: string
total_institutions:
type: integer
mosques_count:
type: integer
hussainiyas_count:
type: integer
cultural_centers_count:
type: integer
libraries_count:
type: integer
institutes_count:
type: integer
charities_count:
type: integer
total_followers:
type: integer
center_lat:
type: number
format: double
nullable: true
center_lng:
type: number
format: double
nullable: true
required:
- center_lat
- center_lng
- charities_count
- country
- cultural_centers_count
- hussainiyas_count
- institutes_count
- libraries_count
- mosques_count
- total_followers
- total_institutions
RegisterRequestRequest:
type: object
properties:
email:
type: string
format: email
minLength: 1
password:
type: string
writeOnly: true
minLength: 6
fullname:
type: string
minLength: 1
maxLength: 255
phone_number:
type: string
nullable: true
user_type:
allOf:
- $ref: '#/components/schemas/UserTypeEnum'
default: client
languages:
type: array
items:
type: string
minLength: 1
maxLength: 10
skills:
type: array
items:
type: string
minLength: 1
maxLength: 100
country:
type: string
maxLength: 255
city:
type: string
maxLength: 255
required:
- email
- fullname
- password
RegisterResponse:
type: object
properties:
user:
$ref: '#/components/schemas/UserMe'
access:
type: string
refresh:
type: string
message:
type: string
required:
- access
- message
- refresh
- user
RoleEnum:
enum:
- admin
- editor
- viewer
type: string
description: |-
* `admin` - Administrator
* `editor` - Content & Project Editor
* `viewer` - Viewer / Member
RoomTypeEnum:
enum:
- direct
- group
type: string
description: |-
* `direct` - Direct Message
* `group` - Group Conversation
SendNotificationRequest:
type: object
properties:
user_id:
type: integer
description: Target User ID
title:
type: string
minLength: 1
description: Notification title
maxLength: 255
body:
type: string
minLength: 1
description: Notification body
data:
type: object
additionalProperties: {}
description: Extra payload data
required:
- body
- title
- user_id
Support:
type: object
properties:
telegram_number:
type: string
default: ''
whatsapp_number:
type: string
default: ''
office_hours:
type: string
default: ''
SupportMessageCreate:
type: object
properties:
id:
type: integer
readOnly: true
sender_name:
type: string
maxLength: 255
sender_email:
type: string
format: email
maxLength: 254
subject:
type: string
maxLength: 255
sender_phone:
type: string
nullable: true
maxLength: 128
message:
type: string
created_at:
type: string
format: date-time
readOnly: true
required:
- created_at
- id
- message
- sender_email
- sender_name
- subject
SupportMessageCreateRequest:
type: object
properties:
sender_name:
type: string
minLength: 1
maxLength: 255
sender_email:
type: string
format: email
minLength: 1
maxLength: 254
subject:
type: string
minLength: 1
maxLength: 255
sender_phone:
type: string
nullable: true
maxLength: 128
message:
type: string
minLength: 1
required:
- message
- sender_email
- sender_name
- subject
SupportRequest:
type: object
properties:
telegram_number:
type: string
default: ''
whatsapp_number:
type: string
default: ''
office_hours:
type: string
default: ''
TokenObtainPair:
type: object
properties:
access:
type: string
readOnly: true
refresh:
type: string
readOnly: true
required:
- access
- refresh
TokenObtainPairRequest:
type: object
properties:
email:
type: string
writeOnly: true
minLength: 1
password:
type: string
writeOnly: true
minLength: 1
required:
- email
- password
TokenRefresh:
type: object
properties:
access:
type: string
readOnly: true
refresh:
type: string
required:
- access
- refresh
TokenRefreshRequest:
type: object
properties:
refresh:
type: string
minLength: 1
required:
- refresh
TokenVerifyRequest:
type: object
properties:
token:
type: string
writeOnly: true
minLength: 1
required:
- token
TypeEnum:
enum:
- mosque
- hussainiya
- cultural_center
- library
- institute
- charity
- other
type: string
description: |-
* `mosque` - Mosque
* `hussainiya` - Hussainiya / Islamic Center
* `cultural_center` - Cultural Center
* `library` - Islamic Library
* `institute` - Seminary & Institute
* `charity` - Charity & Foundation
* `other` - Other Organization
UserFCM:
type: object
properties:
fcm:
type: string
nullable: true
title: FCM Token
maxLength: 512
UserFCMRequest:
type: object
properties:
fcm:
type: string
nullable: true
title: FCM Token
maxLength: 512
UserGuest:
type: object
properties:
device_id:
type: string
fcm:
type: string
device_os:
$ref: '#/components/schemas/DeviceOsEnum'
lat:
type: string
nullable: true
maxLength: 255
lon:
type: string
nullable: true
maxLength: 255
timezone:
type: string
nullable: true
UserGuestRequest:
type: object
properties:
device_id:
type: string
minLength: 1
fcm:
type: string
minLength: 1
device_os:
$ref: '#/components/schemas/DeviceOsEnum'
lat:
type: string
nullable: true
maxLength: 255
lon:
type: string
nullable: true
maxLength: 255
timezone:
type: string
nullable: true
UserLogin:
type: object
properties:
token:
type: string
readOnly: true
nullable: true
fullname:
type: string
readOnly: true
nullable: true
avatar:
type: string
readOnly: true
nullable: true
password:
type: string
fcm:
type: string
device_id:
type: string
timezone:
type: string
nullable: true
required:
- avatar
- fullname
- password
- token
UserLoginRequest:
type: object
properties:
email:
type: string
format: email
writeOnly: true
minLength: 1
password:
type: string
minLength: 1
fcm:
type: string
minLength: 1
device_id:
type: string
minLength: 1
timezone:
type: string
nullable: true
required:
- email
- password
UserMe:
type: object
properties:
id:
type: integer
readOnly: true
email:
type: string
format: email
readOnly: true
nullable: true
title: Email Address
description: User primary email address.
username:
type: string
readOnly: true
nullable: true
fullname:
type: string
nullable: true
title: Full Name
description: Full name of the user.
maxLength: 255
phone_number:
type: string
nullable: true
description: e.g., +1 555 1234567
maxLength: 128
user_type:
allOf:
- $ref: '#/components/schemas/UserTypeEnum'
readOnly: true
avatar:
type: string
format: uri
nullable: true
bio:
type: string
nullable: true
languages: {}
skills: {}
country:
type: string
nullable: true
maxLength: 255
city:
type: string
nullable: true
maxLength: 255
gender:
nullable: true
oneOf:
- $ref: '#/components/schemas/GenderEnum'
- $ref: '#/components/schemas/BlankEnum'
- $ref: '#/components/schemas/NullEnum'
birthdate:
type: string
format: date
nullable: true
date_joined:
type: string
format: date-time
readOnly: true
is_active:
type: boolean
readOnly: true
title: Active
description: Designates whether this user should be treated as active.
is_staff:
type: boolean
readOnly: true
roles:
type: array
items: {}
readOnly: true
permissions:
type: array
items: {}
readOnly: true
verification_status:
type: string
readOnly: true
is_verified:
type: boolean
readOnly: true
required:
- date_joined
- email
- id
- is_active
- is_staff
- is_verified
- permissions
- roles
- user_type
- username
- verification_status
UserProfile:
type: object
properties:
id:
type: integer
readOnly: true
device_id:
type: string
readOnly: true
nullable: true
fcm:
type: string
description: Firebase Cloud Messaging token.
fullname:
type: string
slug:
type: string
readOnly: true
nullable: true
pattern: ^[-a-zA-Z0-9_]+$
avatar:
type: string
nullable: true
email:
type: string
format: email
readOnly: true
nullable: true
title: Email Address
description: User primary email address.
phone_number:
type: string
nullable: true
description: e.g., +1 555 1234567
maxLength: 128
info:
type: string
readOnly: true
nullable: true
title: Bio / Info
skill:
type: string
readOnly: true
nullable: true
title: Skill / Role
city:
type: string
nullable: true
maxLength: 255
country:
type: string
nullable: true
maxLength: 255
birthdate:
type: string
format: date
nullable: true
gender:
allOf:
- $ref: '#/components/schemas/GenderEnum'
description: |-
Select the user's gender.
* `male` - Male
* `female` - Female
* `other` - Other
saved_location:
type: object
additionalProperties: {}
readOnly: true
required:
- device_id
- email
- id
- info
- saved_location
- skill
- slug
UserProfileRequest:
type: object
properties:
fcm:
type: string
minLength: 1
description: Firebase Cloud Messaging token.
fullname:
type: string
minLength: 1
avatar:
type: string
nullable: true
minLength: 1
phone_number:
type: string
nullable: true
description: e.g., +1 555 1234567
maxLength: 128
password:
type: string
writeOnly: true
minLength: 1
city:
type: string
nullable: true
maxLength: 255
country:
type: string
nullable: true
maxLength: 255
birthdate:
type: string
format: date
nullable: true
gender:
allOf:
- $ref: '#/components/schemas/GenderEnum'
description: |-
Select the user's gender.
* `male` - Male
* `female` - Female
* `other` - Other
UserRecoverPassword:
type: object
description: |-
Validates that an email is provided and is in a valid format
without checking for database uniqueness.
properties:
email:
type: string
format: email
required:
- email
UserRecoverPasswordRequest:
type: object
description: |-
Validates that an email is provided and is in a valid format
without checking for database uniqueness.
properties:
email:
type: string
format: email
minLength: 1
required:
- email
UserRegister:
type: object
properties:
id:
type: integer
readOnly: true
fullname:
type: string
nullable: true
title: Full Name
description: Full name of the user.
maxLength: 255
email:
type: string
format: email
fcm:
type: string
nullable: true
required:
- email
- fullname
- id
UserRegisterRequest:
type: object
properties:
fullname:
type: string
nullable: true
title: Full Name
description: Full name of the user.
maxLength: 255
email:
type: string
format: email
minLength: 1
password:
type: string
writeOnly: true
minLength: 1
fcm:
type: string
nullable: true
device_id:
type: string
writeOnly: true
nullable: true
required:
- email
- fullname
UserResetPasswordRequest:
type: object
properties:
password:
type: string
writeOnly: true
minLength: 1
required:
- password
UserTypeEnum:
enum:
- client
- student
- professor
- consultant
- admin
- super_admin
- regional_admin
- institution_admin
- editor
- viewer
type: string
description: |-
* `client` - Client / User
* `student` - Student / Member
* `professor` - Professor / Scholar
* `consultant` - Consultant
* `admin` - Admin
* `super_admin` - Super Admin
* `regional_admin` - Regional Admin
* `institution_admin` - Institution Admin
* `editor` - Editor
* `viewer` - Viewer
UserVerify:
type: object
properties:
code:
type: string
maxLength: 6
email:
type: string
format: email
device_id:
type: string
maxLength: 255
required:
- code
- email
UserVerifyRequest:
type: object
properties:
code:
type: string
minLength: 1
maxLength: 6
email:
type: string
format: email
minLength: 1
device_id:
type: string
minLength: 1
maxLength: 255
required:
- code
- email
VerificationDocument:
type: object
properties:
id:
type: integer
readOnly: true
user:
type: integer
readOnly: true
document_type:
$ref: '#/components/schemas/DocumentTypeEnum'
document_type_display:
type: string
readOnly: true
title:
type: string
nullable: true
title: Document Title
maxLength: 255
document_file:
type: string
format: uri
status:
allOf:
- $ref: '#/components/schemas/VerificationDocumentStatusEnum'
readOnly: true
title: Verification Status
status_display:
type: string
readOnly: true
admin_notes:
type: string
readOnly: true
nullable: true
title: Admin Notes / Feedback
reviewed_by_email:
type: string
format: email
readOnly: true
nullable: true
uploaded_at:
type: string
format: date-time
readOnly: true
reviewed_at:
type: string
format: date-time
readOnly: true
nullable: true
required:
- admin_notes
- document_file
- document_type_display
- id
- reviewed_at
- reviewed_by_email
- status
- status_display
- uploaded_at
- user
VerificationDocumentStatusEnum:
enum:
- pending
- verified
- rejected
type: string
description: |-
* `pending` - Pending Review
* `verified` - Verified
* `rejected` - Rejected
VerificationDocumentUploadRequest:
type: object
properties:
document_type:
allOf:
- $ref: '#/components/schemas/DocumentTypeEnum'
default: national_id
title:
type: string
maxLength: 255
document_file:
type: string
format: binary
required:
- document_file
VerificationStatusEnum:
enum:
- pending
- approved
- rejected
type: string
description: |-
* `pending` - Pending Review
* `approved` - Approved & Verified
* `rejected` - Rejected
WebUserRegister:
type: object
properties:
id:
type: integer
readOnly: true
fullname:
type: string
nullable: true
title: Full Name
description: Full name of the user.
maxLength: 255
email:
type: string
format: email
fcm:
type: string
nullable: true
required:
- email
- fullname
- id
WebUserRegisterRequest:
type: object
properties:
fullname:
type: string
nullable: true
title: Full Name
description: Full name of the user.
maxLength: 255
email:
type: string
format: email
minLength: 1
password:
type: string
writeOnly: true
minLength: 1
fcm:
type: string
nullable: true
required:
- email
- fullname
- password
securitySchemes:
cookieAuth:
type: apiKey
in: cookie
name: sessionid
jwtAuth:
type: http
scheme: bearer
bearerFormat: JWT
tokenAuth:
type: apiKey
in: header
name: Authorization
description: Token-based authentication with required prefix "Token"