Download OpenAPI specification:Download
{context}/user/v1 - Note: These resources can be used in other servicesThis API creates a user account.
/user/v1/account/createemail or phone must be provided; phone_code is required when phone is present.configuration.allowed_auth_mode, a password may be required (or rejected).Request body consist of metadata and accepts payload as JSON
| name | string Name of the user. Alphabets and spaces only. |
| email required | string <email> User email. Required if |
| username | string Username (3-40 chars, lowercase letters/numbers/_/- or an email). |
| phone | string Phone number (7-15 digits). Required if |
| phone_code | string Country calling code (2-4 chars). Required when |
| password | string User password. Must satisfy the configured password policy; may be required depending on tenant allowed_auth_mode. |
| otp | string 6-digit OTP. Required only when ENABLE_EMAIL_OTP_VERIFICATION is enabled for the tenant. |
| role | string Role for the user. Conditionally validated: only checked when present, and must not be the admin role. |
| registration_code | string Optional organization registration code used to attach the user to an org. |
{- "name": "Nevil Mathew",
- "email": "mentee@tunerlabs.com",
- "password": "Password@123"
}{- "responseCode": "OK",
- "message": "Sign-up successful, Please wait while logging in.",
- "result": {
- "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.<snip-verbatim-jwt>",
- "refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.<snip-verbatim-jwt>",
- "user": {
- "id": 22,
- "email": "mentee_3t7m88mkgp@tunerlabs.com",
- "email_verified": "false",
- "name": "Nevil Mathew",
- "username": "mentee_3t7m88mvl5",
- "phone": null,
- "location": null,
- "about": null,
- "share_link": null,
- "status": "ACTIVE",
- "image": null,
- "has_accepted_terms_and_conditions": false,
- "languages": null,
- "preferred_language": {
- "value": "en",
- "label": "English"
}, - "tenant_code": "default",
- "meta": null,
- "created_at": "2026-07-15T10:56:20.430Z",
- "updated_at": "2026-07-15T10:56:20.430Z",
- "deleted_at": null,
- "organizations": [
- {
- "id": 1,
- "name": "Default Organization",
- "code": "default_code",
- "description": "Updated via replay script",
- "status": "ACTIVE",
- "related_orgs": [
- 999999999
], - "tenant_code": "default",
- "meta": null,
- "created_by": null,
- "updated_by": 19,
- "roles": [
- {
- "id": 8,
- "title": "org_admin",
- "label": null,
- "user_type": 1,
- "status": "ACTIVE",
- "organization_id": 1,
- "visibility": "PUBLIC",
- "tenant_code": "default",
- "translations": null
}, - {
- "id": 6,
- "title": "mentee",
- "label": null,
- "user_type": 0,
- "status": "ACTIVE",
- "organization_id": 1,
- "visibility": "PUBLIC",
- "tenant_code": "default",
- "translations": null
}
]
}
]
}
}, - "meta": {
- "formsVersion": [
- {
- "id": 1,
- "type": "formsrggjf",
- "version": 0
}, - {
- "id": 2,
- "type": "formsrggjf",
- "version": 0
}, - {
- "id": 3,
- "type": "formcsfgof",
- "version": 0
}, - {
- "id": 4,
- "type": "formcsfgof",
- "version": 0
}, - {
- "id": 5,
- "type": "formsrggjf",
- "version": 0
}
], - "correlation": "3d8ff223-9a93-4b4c-81a1-3f39c3d48ff0"
}
}This API logs a user in.
/user/v1/account/loginidentifier is required. At least one of password or otp must be supplied.configuration.allowed_auth_mode; a credential for a disallowed auth mode returns AUTH_MODE_NOT_ALLOWED.Request body for user login
| identifier required | string Email, phone number, or username of the user. |
| phone_code | string Country calling code (e.g. +91). Required/validated only for phone identifiers. |
| password required | string User password. Provide this OR |
| otp | string 6-digit login OTP. Provide this OR |
{- "identifier": "mentee@tunerlabs.com",
- "phone_code": "+91",
- "password": "Password@123"
}{- "responseCode": "OK",
- "message": "User logged in successfully.",
- "result": {
- "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.<snip-verbatim-jwt>",
- "refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.<snip-verbatim-jwt>",
- "user": {
- "id": 22,
- "email": "652ad9bf40fd73f960ae4fbf5178c826045a570b3c5e0757e9040156203f9f39",
- "email_verified": "false",
- "name": "Nevil Mathew",
- "username": "mentee_3t7m88mvl5",
- "phone": null,
- "phone_code": null,
- "location": null,
- "about": null,
- "share_link": null,
- "status": "ACTIVE",
- "image": null,
- "has_accepted_terms_and_conditions": false,
- "languages": null,
- "preferred_language": {
- "value": "en",
- "label": "English"
}, - "tenant_code": "default",
- "meta": null,
- "created_at": "2026-07-15T10:56:20.430Z",
- "updated_at": "2026-07-15T10:56:20.430Z",
- "deleted_at": null,
- "organizations": [
- {
- "id": 1,
- "name": "Default Organization",
- "code": "default_code",
- "description": "Updated via replay script",
- "status": "ACTIVE",
- "related_orgs": [
- 999999999
], - "tenant_code": "default",
- "meta": null,
- "created_by": null,
- "updated_by": 19,
- "roles": [
- {
- "id": 8,
- "title": "org_admin",
- "label": null,
- "user_type": 1,
- "status": "ACTIVE",
- "organization_id": 1,
- "visibility": "PUBLIC",
- "tenant_code": "default",
- "translations": null
}, - {
- "id": 6,
- "title": "mentee",
- "label": null,
- "user_type": 0,
- "status": "ACTIVE",
- "organization_id": 1,
- "visibility": "PUBLIC",
- "tenant_code": "default",
- "translations": null
}
]
}
], - "identifier": "mentee_3t7m88mkgp@tunerlabs.com"
}
}, - "meta": {
- "formsVersion": [
- {
- "id": 1,
- "type": "formsrggjf",
- "version": 0
}, - {
- "id": 2,
- "type": "formsrggjf",
- "version": 0
}, - {
- "id": 3,
- "type": "formcsfgof",
- "version": 0
}, - {
- "id": 4,
- "type": "formcsfgof",
- "version": 0
}, - {
- "id": 5,
- "type": "formsrggjf",
- "version": 0
}
], - "correlation": "66152627-619e-4263-b6b7-d63ff3458af6"
}
}This API logs a user out.
/user/v1/account/logoutrefresh_token is required.| X-auth-token required | string X-auth-token from the login API response. |
| refresh_token required | string The refresh token issued at login. |
{- "refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}{- "responseCode": "OK",
- "message": "User logged out successfully.",
- "result": [ ],
- "meta": {
- "formsVersion": [
- {
- "id": 1,
- "type": "formsrggjf",
- "version": 0
}, - {
- "id": 2,
- "type": "formsrggjf",
- "version": 0
}, - {
- "id": 3,
- "type": "formcsfgof",
- "version": 0
}, - {
- "id": 4,
- "type": "formcsfgof",
- "version": 0
}, - {
- "id": 5,
- "type": "formsrggjf",
- "version": 0
}, - {
- "id": 6,
- "type": "formhvedht",
- "version": 0
}, - {
- "id": 7,
- "type": "formsrggjf",
- "version": 0
}, - {
- "id": 8,
- "type": "formcsfgof",
- "version": 0
}, - {
- "id": 9,
- "type": "formhvedht",
- "version": 0
}
], - "correlation": "7627d9e4-df47-4c78-bb6a-c288b6d0ef9b"
}
}This API generates an access token from a refresh token.
/user/v1/account/generateTokenrefresh_token is required.| X-auth-token required | string X-auth-token from the login API response. |
| refresh_token required | string The refresh token issued at login. |
{- "refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}{- "responseCode": "OK",
- "message": "Access token generated successfully",
- "result": {
- "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.<snip-verbatim-jwt>"
}, - "meta": {
- "formsVersion": [
- {
- "id": 1,
- "type": "formsrggjf",
- "version": 0
}, - {
- "id": 2,
- "type": "formsrggjf",
- "version": 0
}, - {
- "id": 3,
- "type": "formcsfgof",
- "version": 0
}, - {
- "id": 4,
- "type": "formcsfgof",
- "version": 0
}, - {
- "id": 5,
- "type": "formsrggjf",
- "version": 0
}
], - "correlation": "252b9df0-4483-4b41-8e7c-e3e7e7ccd333"
}
}This API generates an OTP (used in password reset).
/user/v1/account/generateOtpidentifier and password are required.| X-auth-token required | string X-auth-token from the login API response. |
| identifier required | string Email, phone, or username of the account. |
| password required | string User password. |
{- "identifier": "mentee@tunerlabs.com",
- "password": "Password@123"
}{- "responseCode": "OK",
- "message": "OTP has been sent to your registered email or phone number. Please enter the OTP to update your password.",
- "result": [ ],
- "meta": {
- "formsVersion": [
- {
- "id": 1,
- "type": "formsrggjf",
- "version": 0
}, - {
- "id": 2,
- "type": "formsrggjf",
- "version": 0
}, - {
- "id": 3,
- "type": "formcsfgof",
- "version": 0
}, - {
- "id": 4,
- "type": "formcsfgof",
- "version": 0
}, - {
- "id": 5,
- "type": "formsrggjf",
- "version": 0
}
], - "correlation": "f54e330f-30b7-490b-8069-bd2f68f61c76"
}
}This API resets a user's password.
/user/v1/account/resetPasswordidentifier, password, and otp are all required.| X-auth-token required | string X-auth-token from the login API response. |
| identifier required | string Email, phone, or username of the account. |
| password required | string New password. Must satisfy the configured password policy. |
| otp required | string 6-digit OTP received for the reset. |
{- "identifier": "mentee@tunerlabs.com",
- "password": "NewPassword@123",
- "otp": "123456"
}{- "responseCode": "OK",
- "message": "User logged in successfully.",
- "result": {
- "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.<snip-verbatim-jwt>",
- "refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.<snip-verbatim-jwt>",
- "user": {
- "id": 22,
- "email": "652ad9bf40fd73f960ae4fbf5178c826045a570b3c5e0757e9040156203f9f39",
- "email_verified": "false",
- "name": "Nevil Mathew",
- "username": "mentee_3t7m88mvl5",
- "phone": null,
- "phone_code": null,
- "location": null,
- "about": null,
- "share_link": null,
- "status": "ACTIVE",
- "image": null,
- "has_accepted_terms_and_conditions": false,
- "languages": null,
- "preferred_language": {
- "value": "en",
- "label": "English"
}, - "tenant_code": "default",
- "meta": null,
- "created_at": "2026-07-15T10:56:20.430Z",
- "updated_at": "2026-07-15T10:56:20.430Z",
- "deleted_at": null,
- "organizations": [
- {
- "id": 1,
- "name": "Default Organization",
- "code": "default_code",
- "description": "Updated via replay script",
- "status": "ACTIVE",
- "related_orgs": [
- 999999999
], - "tenant_code": "default",
- "meta": null,
- "created_by": null,
- "updated_by": 19,
- "roles": [
- {
- "id": 8,
- "title": "org_admin",
- "label": null,
- "user_type": 1,
- "status": "ACTIVE",
- "organization_id": 1,
- "visibility": "PUBLIC",
- "tenant_code": "default",
- "translations": null
}, - {
- "id": 6,
- "title": "mentee",
- "label": null,
- "user_type": 0,
- "status": "ACTIVE",
- "organization_id": 1,
- "visibility": "PUBLIC",
- "tenant_code": "default",
- "translations": null
}
]
}
], - "identifier": "mentee_3t7m88mkgp@tunerlabs.com"
}
}, - "meta": {
- "formsVersion": [
- {
- "id": 1,
- "type": "formsrggjf",
- "version": 0
}, - {
- "id": 2,
- "type": "formsrggjf",
- "version": 0
}, - {
- "id": 3,
- "type": "formcsfgof",
- "version": 0
}, - {
- "id": 4,
- "type": "formcsfgof",
- "version": 0
}, - {
- "id": 5,
- "type": "formsrggjf",
- "version": 0
}
], - "correlation": "66152627-619e-4263-b6b7-d63ff3458af6"
}
}This API sends a registration OTP.
/user/v1/account/registrationOtpregistration_code is required; at least one of email, phone, or username must be provided (phone_code required with phone).| X-auth-token required | string X-auth-token from the login API response. |
| email required | string <email> User email. |
| phone | string Phone number (7-15 digits). |
| username | string Username (3-30 chars). |
| phone_code | string Country calling code (e.g. +91). Required when |
| name | string Name of the user. |
| registration_code required | string Organization registration code. |
{- "email": "mentee@tunerlabs.com",
- "registration_code": "org-signup-code"
}{- "responseCode": "OK",
- "message": "OTP has been sent to your registered email or phone number. Please enter the OTP to update your password.",
- "result": [ ],
- "meta": {
- "formsVersion": [
- {
- "id": 1,
- "type": "formsrggjf",
- "version": 0
}, - {
- "id": 2,
- "type": "formsrggjf",
- "version": 0
}, - {
- "id": 3,
- "type": "formcsfgof",
- "version": 0
}, - {
- "id": 4,
- "type": "formcsfgof",
- "version": 0
}, - {
- "id": 5,
- "type": "formsrggjf",
- "version": 0
}
], - "correlation": "f54e330f-30b7-490b-8069-bd2f68f61c76"
}
}This API deletes the authenticated user's own account.
/user/v1/account/deletepassword is required for confirmation.| X-auth-token required | string X-auth-token from the login API response. |
| password required | string The account password, for confirmation. |
{- "password": "Password@123"
}{- "responseCode": "OK",
- "message": "User deleted successfully",
- "result": [ ],
- "meta": {
- "formsVersion": [
- {
- "id": 1,
- "type": "formsrggjf",
- "version": 0
}, - {
- "id": 2,
- "type": "formsrggjf",
- "version": 0
}, - {
- "id": 3,
- "type": "formcsfgof",
- "version": 0
}, - {
- "id": 4,
- "type": "formcsfgof",
- "version": 0
}, - {
- "id": 5,
- "type": "formsrggjf",
- "version": 0
}, - {
- "id": 6,
- "type": "formhvedht",
- "version": 0
}, - {
- "id": 7,
- "type": "formsrggjf",
- "version": 0
}, - {
- "id": 8,
- "type": "formcsfgof",
- "version": 0
}, - {
- "id": 9,
- "type": "formhvedht",
- "version": 0
}
], - "correlation": "0c3893e3-cf7d-417e-a393-feda3c38140f"
}
}This API changes the authenticated user's password.
/user/v1/account/changePasswordoldPassword and newPassword are required.| X-auth-token required | string X-auth-token from the login API response. |
| oldPassword required | string Current password. |
| newPassword required | string New password. Must satisfy the configured password policy and differ from the old one. |
{- "oldPassword": "Password@123",
- "newPassword": "NewPassword@123"
}{- "responseCode": "OK",
- "message": "Your password has been changed successfully. Please log-in to continue.",
- "result": { },
- "meta": {
- "formsVersion": [
- {
- "id": 1,
- "type": "formsrggjf",
- "version": 0
}, - {
- "id": 2,
- "type": "formsrggjf",
- "version": 0
}, - {
- "id": 3,
- "type": "formcsfgof",
- "version": 0
}, - {
- "id": 4,
- "type": "formcsfgof",
- "version": 0
}, - {
- "id": 5,
- "type": "formsrggjf",
- "version": 0
}
], - "correlation": "f1ccb4bb-a4fb-4487-9c1f-8252a93a4141"
}
}This API changes a user's role.
/user/v1/account/changeRoleemail and role are required.| X-auth-token required | string X-auth-token from the login API response. |
| email required | string <email> Email of the user whose role should change. |
| role required | string The new role. |
{- "email": "mentee@tunerlabs.com",
- "role": "mentor"
}{- "responseCode": "CLIENT_ERROR",
- "error": [
- { }
], - "meta": {
- "correlation": "string"
}, - "message": "string"
}This API validates a list of email IDs.
/user/v1/account/validatingEmailIdsemailIds (non-empty array of valid emails) is required.| X-auth-token required | string X-auth-token from the login API response. |
| emailIds required | Array of strings <email> Non-empty array of email addresses. |
{- "emailIds": [
- "user1@example.com",
- "user2@example.com"
]
}{- "responseCode": "CLIENT_ERROR",
- "error": [
- { }
], - "meta": {
- "correlation": "string"
}, - "message": "string"
}This API lists the authenticated user's sessions.
/user/v1/account/sessions| status | string Optional session status filter (e.g. ACTIVE). |
| period | string Optional time period filter. |
| X-auth-token required | string X-auth-token from the login API response. |
{- "responseCode": "OK",
- "message": "User sessions fetched successfully",
- "result": {
- "data": [
- {
- "id": 65,
- "device_info": { },
- "status": "ACTIVE",
- "login_time": "1784112981",
- "logout_time": null
}
], - "count": 1
}, - "meta": {
- "formsVersion": [
- {
- "id": 1,
- "type": "formsrggjf",
- "version": 0
}, - {
- "id": 2,
- "type": "formsrggjf",
- "version": 0
}, - {
- "id": 3,
- "type": "formcsfgof",
- "version": 0
}, - {
- "id": 4,
- "type": "formcsfgof",
- "version": 0
}, - {
- "id": 5,
- "type": "formsrggjf",
- "version": 0
}
], - "correlation": "a7fc4a8b-a7a0-48fe-b696-2fafb0959e5b"
}
}This API validates a user session by token.
/user/v1/account/validateUserSession| token | string The session token to validate. |
{- "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}{- "responseCode": "OK",
- "message": "User session validated successfully",
- "result": {
- "data": {
- "user_session_active": true
}
}, - "meta": {
- "formsVersion": [
- {
- "id": 1,
- "type": "formsrggjf",
- "version": 0
}, - {
- "id": 2,
- "type": "formsrggjf",
- "version": 0
}, - {
- "id": 3,
- "type": "formcsfgof",
- "version": 0
}, - {
- "id": 4,
- "type": "formcsfgof",
- "version": 0
}, - {
- "id": 5,
- "type": "formsrggjf",
- "version": 0
}
], - "correlation": "ecd8a007-9bed-47b3-a08d-667622567d15"
}
}This API lists users.
/user/v1/account/listtype query parameter is required.| type required | string Example: type=mentor Type of user (e.g. mentor, mentee). |
| page | number Example: page=1 Page number for pagination. |
| limit | number Example: limit=2 Number of records to limit. |
| search | string Example: search=john Search for name or title of user. |
| X-auth-token required | string X-auth-token from the login API response. |
{- "responseCode": "OK",
- "message": "User list fetched successfully.",
- "result": {
- "data": [ ],
- "count": 0
}, - "meta": {
- "formsVersion": [
- {
- "id": 1,
- "type": "formsrggjf",
- "version": 0
}, - {
- "id": 2,
- "type": "formsrggjf",
- "version": 0
}, - {
- "id": 3,
- "type": "formcsfgof",
- "version": 0
}, - {
- "id": 4,
- "type": "formcsfgof",
- "version": 0
}, - {
- "id": 5,
- "type": "formsrggjf",
- "version": 0
}
], - "correlation": "f6b22425-1cee-4ab9-8fc5-f3b99f0cc319"
}
}This API searches users.
/user/v1/account/searchtenant_code, type, and organization_id are required query parameters; user_ids and excluded_user_ids are required in the body.| tenant_code required | string Example: tenant_code=default Tenant code. |
| type required | string Example: type=mentor Valid user type (mentee, mentor, session_manager, org_admin, reviewer), or |
| organization_id required | number Example: organization_id=1 Organization ID. |
| page | number Example: page=1 Page number for pagination. |
| limit | number Example: limit=2 Number of records to limit. |
| search | string Example: search=john Search for the name or title of the user. |
| X-auth-token required | string X-auth-token from the login API response. |
| user_ids required | Array of integers User IDs to include in the search. |
| excluded_user_ids required | Array of integers User IDs to exclude from the search. |
{- "user_ids": [
- 22,
- 23
], - "excluded_user_ids": [
- 24
]
}{- "responseCode": "OK",
- "message": "User list fetched successfully.",
- "result": {
- "data": [
- {
- "id": 22,
- "email": "mentee_3t7m88mkgp@tunerlabs.com",
- "email_verified": "false",
- "name": "Nevil Mathew",
- "username": "mentee_3t7m88mvl5",
- "phone": null,
- "phone_code": null,
- "location": null,
- "about": null,
- "share_link": null,
- "status": "ACTIVE",
- "image": null,
- "has_accepted_terms_and_conditions": true,
- "languages": null,
- "preferred_language": "en",
- "configs": null,
- "tenant_code": "default",
- "roles": [
- 8,
- 6
], - "custom_entity_text": null,
- "meta": null,
- "created_at": "2026-07-15T10:56:20.430Z",
- "updated_at": "2026-07-15T10:56:21.449Z",
- "deleted_at": null,
- "user_organizations": [
- {
- "user_id": 22,
- "organization_code": "default_code",
- "tenant_code": "default",
- "created_at": "2026-07-15T10:56:20.439Z",
- "updated_at": "2026-07-15T10:56:20.440Z",
- "deleted_at": null,
- "organization": {
- "id": 1,
- "name": "Default Organization",
- "code": "default_code"
}, - "roles": [
- {
- "role_id": 8,
- "role": {
- "id": 8,
- "title": "org_admin",
- "label": null
}
}, - {
- "role_id": 6,
- "role": {
- "id": 6,
- "title": "mentee",
- "label": null
}
}
]
}
]
}
], - "count": 1
}, - "meta": {
- "formsVersion": [
- {
- "id": 1,
- "type": "formsrggjf",
- "version": 0
}, - {
- "id": 2,
- "type": "formsrggjf",
- "version": 0
}, - {
- "id": 3,
- "type": "formcsfgof",
- "version": 0
}, - {
- "id": 4,
- "type": "formcsfgof",
- "version": 0
}, - {
- "id": 5,
- "type": "formsrggjf",
- "version": 0
}
], - "correlation": "7902ae69-3b55-47c5-b493-ef10e61d0139"
}
}This API retrieves details of a user's profile.
/user/v1/user/read/{userId}. There is also an id-less variant, /user/v1/user/read, which defaults to the authenticated caller's own id.language is optional; when provided and not en, role labels are localized to it.internal_access_token header allows fetching a soft-deleted user's details.language query parameter are not subject to additional format validation.| userId required | integer Example: 22 User ID to look up. (Note: functionally optional in the underlying controller -- omitting this whole path segment via the sibling route |
| language | string Example: language=en Language code used to localize role labels in the response. |
| X-auth-token required | string To make use of the API, you require X-auth-token. This is Available in login API Response. |
| internal_access_token | string Optional. When present, allows fetching a soft-deleted (paranoid-excluded) user's details. |
{- "responseCode": "OK",
- "message": "Profile fetched successfully.",
- "result": {
- "id": 22,
- "email": "mentee_3t7m88mkgp@tunerlabs.com",
- "email_verified": "false",
- "name": "Nevil Mathew",
- "username": "mentee_3t7m88mvl5",
- "phone": null,
- "phone_code": null,
- "location": null,
- "about": null,
- "share_link": null,
- "status": "ACTIVE",
- "image": null,
- "has_accepted_terms_and_conditions": true,
- "languages": null,
- "preferred_language": {
- "value": "en",
- "label": "English"
}, - "tenant_code": "default",
- "meta": null,
- "created_at": "2026-07-15T10:56:20.430Z",
- "updated_at": "2026-07-15T10:56:21.449Z",
- "deleted_at": null,
- "organizations": [
- {
- "id": 1,
- "name": "Default Organization",
- "code": "default_code",
- "description": "Updated via replay script",
- "status": "ACTIVE",
- "related_orgs": [
- 999999999
], - "tenant_code": "default",
- "meta": null,
- "created_by": null,
- "updated_by": 19,
- "roles": [
- {
- "id": 8,
- "title": "org_admin",
- "label": null,
- "user_type": 1,
- "status": "ACTIVE",
- "organization_id": 1,
- "visibility": "PUBLIC",
- "tenant_code": "default"
}
]
}
], - "permissions": [
- {
- "module": "user",
- "request_type": [
- "POST",
- "DELETE",
- "GET",
- "PUT",
- "PATCH"
], - "service": "user"
}
], - "image_cloud_path": null
}, - "meta": {
- "formsVersion": [
- {
- "id": 1,
- "type": "formsrggjf",
- "version": 0
}
], - "correlation": "45157680-2a5d-45f3-bb47-88ab82201dca"
}
}Retrieves a user's public profile by id, or by email/username/phone (+phone_code) query lookup when no id is given.
/user/v1/user/profileById/{userId}. There is also an id-less variant, /user/v1/user/profileById, for the query-based lookup described below.required must have valid values.id is given: at least one of email, username, or phone must be provided; if phone is provided, phone_code is then also required.| userId required | string^[0-9]+$ Example: 22 Numeric user id. Optional in the underlying controller (see id-less variant note above). |
string <email> Example: email=example@mail.com Email to look up by (only used when no path id is given). | |
| username | string Example: username=mentee_3t7m88mvl5 Username to look up by (only used when no path id is given). |
| phone | string^[0-9]{7,15}$ Example: phone=9876543210 Phone number to look up by, 7-15 digits (only used when no path id is given). Requires phone_code if provided. |
| phone_code | string^\+[0-9]{1,4}$ Example: phone_code=+91 Country dialing code, e.g. +91. Required if phone is provided. |
| tenant_code required | string Example: tenant_code=default Tenant code to scope the lookup to. |
| X-auth-token required | string To make use of the API, you require X-auth-token. This is Available in login API Response. |
{- "responseCode": "OK",
- "message": "User profile fetched successfully!",
- "result": {
- "id": 22,
- "email_verified": "false",
- "name": "Nevil Mathew",
- "username": "mentee_3t7m88mvl5",
- "location": null,
- "about": null,
- "share_link": null,
- "status": "ACTIVE",
- "image": null,
- "has_accepted_terms_and_conditions": true,
- "languages": null,
- "preferred_language": {
- "value": "en",
- "label": "English"
}, - "tenant_code": "default",
- "meta": null,
- "created_at": "2026-07-15T10:56:20.430Z",
- "updated_at": "2026-07-15T10:56:21.449Z",
- "deleted_at": null,
- "organizations": [
- {
- "id": 1,
- "name": "Default Organization",
- "code": "default_code",
- "description": "Updated via replay script",
- "status": "ACTIVE",
- "related_orgs": [
- 999999999
], - "tenant_code": "default",
- "meta": null,
- "created_by": null,
- "updated_by": 19,
- "roles": [
- {
- "id": 8,
- "title": "org_admin",
- "label": null,
- "user_type": 1,
- "status": "ACTIVE",
- "organization_id": 1,
- "visibility": "PUBLIC",
- "tenant_code": "default",
- "translations": null
}
]
}
], - "image_cloud_path": null
}, - "meta": {
- "formsVersion": [
- {
- "id": 1,
- "type": "formsrggjf",
- "version": 0
}
], - "correlation": "c782a6a5-5752-4fa2-9dfb-875ce4353e00"
}
}This API updates a user's preferred language.
/user/v1/user/setLanguagePreferencerequired must have valid values.| X-auth-token required | string To make use of the API, you require X-auth-token. This is Available in login API Response. |
| preferred_language required | string Preferred language value/code. |
{- "preferred_language": "en"
}{- "responseCode": "OK",
- "message": "Your language is changed successfully",
- "result": {
- "id": 22,
- "email": "652ad9bf40fd73f960ae4fbf5178c826045a570b3c5e0757e9040156203f9f39",
- "email_verified": "false",
- "name": "Nevil Mathew",
- "username": "mentee_3t7m88mvl5",
- "phone": null,
- "phone_code": null,
- "location": "ap",
- "about": "Replay test user",
- "share_link": "b6d767d2f8ed5d21a44b0e5886680cb9",
- "status": "ACTIVE",
- "image": null,
- "has_accepted_terms_and_conditions": true,
- "languages": null,
- "preferred_language": "en",
- "configs": null,
- "tenant_code": "default",
- "roles": [
- 8,
- 6
], - "meta": null,
- "created_at": "2026-07-15T10:56:20.430Z",
- "updated_at": "2026-07-15T10:56:22.193Z",
- "deleted_at": null
}, - "meta": {
- "formsVersion": [
- {
- "id": 1,
- "type": "formsrggjf",
- "version": 0
}
], - "correlation": "f8cc4552-0251-44b3-b39f-cf5f1a80ef12"
}
}This API updates the authenticated user's own profile.
/user/v1/user/updaterequired must have valid values.| X-auth-token required | string To make use of the API, you require X-auth-token. This is Available in login API Response. |
| name | string User's name. Must match ^[A-Za-z ]+$ if provided (letters and spaces only). |
| about | string Short bio. Must match ^[a-zA-Z0-9-.,\s]+$ if provided. |
| has_accepted_terms_and_conditions | boolean |
| languages | Array of strings |
| image | string Image path/URL string. |
{- "name": "John Doe",
- "about": "Experienced teacher",
- "has_accepted_terms_and_conditions": true,
- "languages": [
- "en"
], - "image": "profile-images/user22.png"
}{- "responseCode": "OK",
- "message": "Profile updated successfully.",
- "result": {
- "id": 22,
- "email": "mentee_3t7m88mkgp@tunerlabs.com",
- "email_verified": "false",
- "name": "Nevil Mathew",
- "username": "mentee_3t7m88mvl5",
- "phone": null,
- "phone_code": null,
- "location": {
- "value": "ap",
- "label": "default"
}, - "about": "Replay test user",
- "share_link": null,
- "status": "ACTIVE",
- "image": null,
- "has_accepted_terms_and_conditions": true,
- "languages": null,
- "preferred_language": {
- "value": "en",
- "label": "English"
}, - "configs": null,
- "tenant_code": "default",
- "roles": [
- 8,
- 6
], - "meta": null,
- "created_at": "2026-07-15T10:56:20.430Z",
- "updated_at": "2026-07-15T10:56:22.100Z",
- "deleted_at": null
}, - "meta": {
- "formsVersion": [
- {
- "id": 1,
- "type": "formsrggjf",
- "version": 0
}
], - "correlation": "0cd1a696-e455-4390-9667-de370ef08827"
}
}Single endpoint that both creates and updates tenants, depending on whether an id path parameter is present.
Create: POST /user/v1/tenant/update (no id). Bootstraps a
brand-new tenant: the tenant row, its domains, a default
organization, and copies of the default organization's entity
types/entities, forms, notification templates, org features and
user roles. Any failure partway through rolls back everything
created so far.
Update: POST /user/v1/tenant/update/{id} (id = tenant code).
Applies a partial update to the tenant and emits a change event.
code, domains and status in the request body are always
stripped server-side and cannot be changed via this endpoint (see
tenantUpsertRequest).
The X-auth-token is mandatory and cannot be empty or null.
| X-auth-token required | string Access token of the logged-in user. |
| name required | string Display name of the tenant. Must not be empty after trimming. |
| code required | string^[a-zA-Z0-9_]+$ Unique tenant code. Letters, numbers and underscores only. Must not be empty after trimming. |
| description required | string Tenant description. |
| logo required | string URL (or opaque string) for the tenant logo. |
object Free-form theming object (or a JSON string representing one) - only checked for being a valid plain object, no fixed shape enforced by the validator. | |
object Tenant auth configuration. If omitted, defaults server-side to the deployment's configured default (typically | |
object Free-form metadata object (or a JSON string representing one). | |
| domains required | string One or more domains for the tenant. Accepted as a single string (comma-separated for multiple domains). Must not be empty after trimming. |
{- "name": "Replay Test Tenant",
- "code": "tenant3t7o723zj5",
- "description": "created by replay script",
- "configuration": {
- "allowed_auth_mode": [
- "password"
], - "auto_register": true
}, - "domains": "shikshalokam-qa.tekdinext.com"
}{- "responseCode": "OK",
- "message": "Tenant created successfully.",
- "result": {
- "name": "Replay Test Tenant",
- "code": "tenant3t7o723zj5",
- "description": "created by replay script",
- "configuration": {
- "auto_register": true,
- "allowed_auth_mode": [
- "password"
]
}, - "status": "ACTIVE",
- "created_by": 23,
- "updated_by": 23,
- "updated_at": "2026-07-15T10:56:24.538Z",
- "created_at": "2026-07-15T10:56:24.538Z",
- "theming": null,
- "meta": null,
- "deleted_at": null
}, - "meta": {
- "correlation": "054071f9-2f57-4c2a-8518-f352578e7681"
}
}Updates an existing tenant identified by the id path parameter (tenant code). This is the update branch of tenant creation/update - see update for details on how tenants are created.
| id required | string^[a-zA-Z0-9_]+$ Example: tenant3t7o723zj5 Tenant code to update. |
| X-auth-token required | string Access token of the logged-in user. |
| name required | string Display name of the tenant. Must not be empty after trimming. |
| code required | string^[a-zA-Z0-9_]+$ Unique tenant code. Letters, numbers and underscores only. Must not be empty after trimming. |
| description required | string Tenant description. |
| logo required | string URL (or opaque string) for the tenant logo. |
object Free-form theming object (or a JSON string representing one) - only checked for being a valid plain object, no fixed shape enforced by the validator. | |
object Tenant auth configuration. If omitted, defaults server-side to the deployment's configured default (typically | |
object Free-form metadata object (or a JSON string representing one). | |
| domains required | string One or more domains for the tenant. Accepted as a single string (comma-separated for multiple domains). Must not be empty after trimming. |
{- "configuration": {
- "allowed_auth_mode": [
- "password",
- "otp"
], - "auto_register": true
}
}{- "responseCode": "OK",
- "message": "Tenant updated successfully.",
- "result": {
- "configuration": {
- "auto_register": true,
- "allowed_auth_mode": [
- "password",
- "otp"
]
}, - "updated_by": 23
}, - "meta": {
- "correlation": "493cf69e-af4e-4ff3-b2c4-2114f4dd2c1a"
}
}Adds one or more verified domains to an existing tenant.
Endpoint: POST /user/v1/tenant/addDomain/{id} (id = tenant code).
Domains already registered for the tenant are silently skipped (not
re-added); if the resulting to-create list is empty because every
domain already existed, TENANT_DOMAINS_ALREADY_PRESENT is returned
(202); if it's empty because every supplied entry was invalid
(non-string or empty string), INVALID_TENANT_DOMAINS is returned
(202) - see tenantInvalidDomains202Response.
The X-auth-token is mandatory and cannot be empty or null.
| id required | string^[a-zA-Z0-9_]+$ Example: shikshagraha Tenant code to add domains to. |
| X-auth-token required | string Access token of the logged-in user. |
required | Array of strings or string One or more domains to add to the tenant. |
{
}{- "responseCode": "OK",
- "message": "Tenant domains added successfully",
- "result": {
- "new_domains_added": [
- "domainorydvo.example.com"
]
}, - "meta": {
- "correlation": "0df5c4f1-f162-42b9-8891-2bf7c97af19b"
}
}Removes one or more domains from an existing tenant.
Endpoint: POST /user/v1/tenant/removeDomain/{id} (id = tenant
code).
Domains that don't match any of the tenant's existing domains are
ignored; if NONE of the supplied domains match,
NO_MATCHING_TENANT_DOMAINS_TO_REMOVE is returned (406). A tenant
must always retain at least one domain -
TENANT_DOMAINS_ATLEAST_ONE_MANDATORY is returned (406) if the
requested removal would remove every existing domain.
The X-auth-token is mandatory and cannot be empty or null.
| id required | string^[a-zA-Z0-9_]+$ Example: tenant3t7o723zj5 Tenant code to remove domains from. |
| X-auth-token required | string Access token of the logged-in user. |
required | Array of strings or string One or more domains to remove from the tenant. |
{- "domains": [
- "new.domain.scd"
]
}{- "responseCode": "OK",
- "message": "TENANT_DOMAINS_ADDED_SUCCESSFULLY",
- "result": {
- "removed_domains": [
- "string"
]
}, - "meta": {
- "correlation": "string"
}
}Fetches details for a single tenant.
Endpoint: GET /user/v1/tenant/read/{id} (id = tenant code). An
id-less variant, GET /user/v1/tenant/read, is also available and
defaults to the caller's own tenant.
Caller must have a decoded token with at least one role, or
PERMISSION_DENIED (400) is returned.
If the caller holds the full admin role, id selects any tenant in
the system (all columns except deleted_at, plus organizations and
domains arrays are returned).
If the caller does NOT hold the full admin role, only their own
tenant can be read - if id is supplied and differs from their own
tenant code, PERMISSION_DENIED (400) is returned; only code,
name, description, configuration, meta are returned (no
organizations/domains arrays).
The X-auth-token is mandatory and cannot be empty or null.
| id | string Example: default Tenant code to read. Optional for non-admin callers (defaults to the caller's own tenant); effectively required for admin callers (otherwise no tenant code is resolved and |
| X-auth-token required | string Access token of the logged-in user. |
{- "responseCode": "OK",
- "message": "Tenant details fetched.",
- "result": {
- "code": "default",
- "name": "Default Tenant",
- "status": "ACTIVE",
- "description": "This is the default tenant.",
- "theming": {
- "primaryColor": "#4F46E5",
- "secondaryColor": "#F97316"
}, - "configuration": {
- "auto_register": true,
- "allowed_auth_mode": [
- "otp",
- "password"
]
}, - "meta": null,
- "created_by": null,
- "updated_by": null,
- "created_at": "2026-07-15T09:40:42.047Z",
- "updated_at": "2026-07-15T09:40:42.047Z",
- "deleted_at": null,
- "organizations": [
- {
- "id": 2,
- "name": "Throwaway Org",
- "code": "throworg3t56r761kt"
}, - {
- "id": 4,
- "name": "Throwaway Org",
- "code": "throworg3t6fcumbgj"
}, - {
- "id": 6,
- "name": "Throwaway Org",
- "code": "throworg3t7nn1r1do"
}, - {
- "id": 1,
- "name": "Default Organization",
- "code": "default_code"
}
], - "domains": [
- {
- "domain": "localhost",
- "verified": true
}, - {
- "domain": "domain3sy96k04p5.example.com",
- "verified": true
}, - {
- "domain": "domain3t04tioffi.example.com",
- "verified": true
}, - {
- "domain": "domain3t2nx3skgn.example.com",
- "verified": true
}
]
}, - "meta": {
- "correlation": "76663736-8e2d-4b04-830f-d440679b9618"
}
}Internal-only variant of read for service-to-service calls, always fetched with full/admin-level detail regardless of caller role. Authorization is via the internal_access_token header instead of a user's X-auth-token.
Endpoint: GET /user/v1/tenant/readInternal/{id} (id = tenant
code).
If id is empty/missing, TENANT_CODE_REQUIRED (400) is returned.
| id required | string Example: shikshalokam Tenant code to read. |
| internal_access_token required | string Shared secret for internal service-to-service calls. Must equal |
{- "responseCode": "OK",
- "message": "Tenant details fetched.",
- "result": {
- "code": "default",
- "name": "Default Tenant",
- "status": "ACTIVE",
- "description": "This is the default tenant.",
- "theming": {
- "primaryColor": "#4F46E5",
- "secondaryColor": "#F97316"
}, - "configuration": {
- "auto_register": true,
- "allowed_auth_mode": [
- "otp",
- "password"
]
}, - "meta": null,
- "created_by": null,
- "updated_by": null,
- "created_at": "2026-07-15T09:40:42.047Z",
- "updated_at": "2026-07-15T09:40:42.047Z",
- "deleted_at": null,
- "organizations": [
- {
- "id": 2,
- "name": "Throwaway Org",
- "code": "throworg3t56r761kt"
}, - {
- "id": 4,
- "name": "Throwaway Org",
- "code": "throworg3t6fcumbgj"
}, - {
- "id": 6,
- "name": "Throwaway Org",
- "code": "throworg3t7nn1r1do"
}, - {
- "id": 1,
- "name": "Default Organization",
- "code": "default_code"
}
], - "domains": [
- {
- "domain": "localhost",
- "verified": true
}, - {
- "domain": "domain3sy96k04p5.example.com",
- "verified": true
}, - {
- "domain": "domain3t04tioffi.example.com",
- "verified": true
}, - {
- "domain": "domain3t2nx3skgn.example.com",
- "verified": true
}
]
}, - "meta": {
- "correlation": "76663736-8e2d-4b04-830f-d440679b9618"
}
}Fetches a paginated, optionally-searched list of tenants (code, name, description only per row).
GET /user/v1/tenant/list.search matches (case-insensitive) against code or name.| page | integer >= 1 Page number (1-indexed). Defaults to 1. |
| limit | integer Page size. |
| search | string Case-insensitive substring match against tenant |
| X-auth-token required | string Access token of the logged-in user. |
{- "responseCode": "OK",
- "message": "Tenant list fetched successfully.",
- "result": [
- {
- "code": "default",
- "name": "Default Tenant",
- "description": "This is the default tenant."
}, - {
- "code": "tenant3t57b9z9dl",
- "name": "Replay Test Tenant",
- "description": "created by replay script"
}, - {
- "code": "tenant3t6fvn4wcg",
- "name": "Replay Test Tenant",
- "description": "created by replay script"
}
], - "meta": {
- "correlation": "250ba92a-a985-4bbc-a4bd-619a1184fced"
}
}Kicks off a bulk user create/invite from a previously-uploaded CSV, scoped to one organization within a tenant.
Endpoint: POST /user/v1/tenant/bulkUserCreate.
The target organization is resolved from the organizationcode /
tenantcode headers, not from the request body. organizationcode
may be either the organization's numeric id or its code.
If the organization cannot be found, or is found but does not belong to the given tenant, the request fails before any upload work starts (see the 406 responses below).
The X-auth-token is mandatory and cannot be empty or null.
| X-auth-token required | string Access token of the logged-in user. |
| organizationcode required | string Example: sot Organization id or code the bulk upload is scoped to. |
| tenantcode required | string Example: shikshagraha Tenant code the bulk upload is scoped to. |
| file_path required | string Path (relative to the configured storage bucket) of the previously-uploaded CSV. |
| upload_type required | string Enum: "upload" "invite" Upload mode. Compared case-insensitively against |
| editable_fields | Array of strings Optional list of user fields that may be edited via the bulk upload. |
{- "file_path": "users/1-1761570904451-users/1-1756128403580-27-oct-bulkupload.csv",
- "upload_type": "upload",
- "editable_fields": [
- "string"
]
}{- "responseCode": "OK",
- "message": "USER_CSV_UPLOADED",
- "result": { },
- "meta": { }
}Creates a new organization.
/user/v1/organization/createrequired must have valid values.| X-auth-token required | string X-auth-token required for API access. Available in the login API Response. |
| name required | string The name of the organization. |
| code required | string A unique code representing the organization. Only lowercase alphanumeric characters are allowed. |
| description required | string A brief description of the organization. |
| tenant_code required | string Code of the tenant the organization belongs to. |
| domains required | Array of strings List of email domains associated with the organization. |
| registration_codes | Array of strings Optional list of registration codes for the organization. |
| admin_email | string Optional email of the user to be assigned as the organization admin. |
{- "name": "MentorEd",
- "code": "mentor112",
- "description": "testing",
- "tenant_code": "default",
- "domains": [
- "example.com"
], - "registration_codes": [ ],
- "admin_email": "admin@example.com"
}{- "responseCode": "string",
- "message": "string",
- "result": { }
}This API is associated with updating an organization.
/user/v1/organization/update/{id}required.related_orgs while updating a different organization is rejected (see updateOrganization400Response).| id required | integer Example: 1 Please append a valid organization ID to the request URL. |
| X-auth-token required | string To make use of the API, you require X-auth-token. This is available in the login API response. |
| name | string The updated name of the organization. |
| description | string The updated description of the organization. |
| related_orgs | Array of integers List of related organization IDs. If the caller is an org-admin/tenant-admin updating an organization other than their own and supplies this field, the request is rejected with a 400 error. |
{- "name": "MentorEd",
- "description": "testing",
- "related_orgs": [
- 2
]
}{- "responseCode": "OK",
- "message": "Organization updated successfully",
- "result": [ ],
- "meta": {
- "formsVersion": [
- {
- "id": 1,
- "type": "formsrggjf",
- "version": 0
}, - {
- "id": 2,
- "type": "formsrggjf",
- "version": 0
}, - {
- "id": 3,
- "type": "formcsfgof",
- "version": 0
}, - {
- "id": 4,
- "type": "formcsfgof",
- "version": 0
}, - {
- "id": 5,
- "type": "formsrggjf",
- "version": 0
}
], - "correlation": "994eab62-49f2-4827-a484-e4f2bc505ffc"
}
}This API is associated with listing organizations based on specified conditions.
/user/v1/organization/listrequired must have valid values.tenant_code is present, a filtered array of organizations for that tenant is returned (optionally further filtered by organization_codes); (2) when organizationIds is supplied in the request body instead, an array of organizations for those ids is returned; (3) otherwise, a paginated listing is returned using pageNo/pageSize/searchText.| page | number Example: page=1 Please specify the page number. Used only when neither tenant_code nor body.organizationIds is supplied (paginated branch). |
| limit | number Example: limit=2 Specify the number of records to limit. Used only in the paginated branch. |
| search | string Example: search=john Search for organizations based on name or title. Used only in the paginated branch. |
| tenant_code | string When supplied, switches to the tenant-scoped array branch instead of the paginated branch. |
| organization_codes | string Comma-separated list of organization codes; only used together with tenant_code, to further filter the tenant-scoped branch. |
| X-auth-token required | string To make use of the API, you require X-auth-token. This is available in the login API response. |
{- "responseCode": "OK",
- "message": "Organization fetched successfully.",
- "result": {
- "count": 6,
- "data": [
- {
- "id": 3,
- "name": "Default",
- "code": "default_code",
- "description": ""
}, - {
- "id": 5,
- "name": "Default",
- "code": "default_code",
- "description": ""
}, - {
- "id": 1,
- "name": "Default Organization",
- "code": "default_code",
- "description": "Updated via replay script"
}, - {
- "id": 2,
- "name": "Throwaway Org",
- "code": "throworg3t56r761kt",
- "description": "temp"
}, - {
- "id": 4,
- "name": "Throwaway Org",
- "code": "throworg3t6fcumbgj",
- "description": "temp"
}, - {
- "id": 6,
- "name": "Throwaway Org",
- "code": "throworg3t7nn1r1do",
- "description": "temp"
}
]
}, - "meta": {
- "formsVersion": [
- {
- "id": 1,
- "type": "formsrggjf",
- "version": 0
}, - {
- "id": 2,
- "type": "formsrggjf",
- "version": 0
}, - {
- "id": 3,
- "type": "formcsfgof",
- "version": 0
}, - {
- "id": 4,
- "type": "formcsfgof",
- "version": 0
}, - {
- "id": 5,
- "type": "formsrggjf",
- "version": 0
}
], - "correlation": "54883149-9149-4563-b6ec-e403eff3e151"
}
}This API is associated with requesting a specific role within an organization.
/user/v1/organization/requestOrgRolerequired must have valid values.| X-auth-token required | string User's access token, which already recognizes the user as the organization's mentee. |
Request body containing role information.
| role required | integer The specific role id being requested. |
required | object Answers to the organization-specific role-request form. |
{- "role": 2,
- "form_data": {
- "about": "I would like to mentor.",
- "experience": "5"
}
}{- "responseCode": "OK",
- "message": "Admin has received your request. Further information will be received through Email.",
- "result": {
- "status": "REQUESTED",
- "id": 4,
- "requester_id": 22,
- "role": 5,
- "organization_id": 1,
- "tenant_code": "default",
- "meta": { },
- "updated_at": "2026-07-15T10:56:23.721Z",
- "created_at": "2026-07-15T10:56:23.721Z",
- "handled_by": null,
- "comments": null,
- "deleted_at": null
}, - "meta": {
- "formsVersion": [
- {
- "id": 1,
- "type": "formsrggjf",
- "version": 0
}, - {
- "id": 2,
- "type": "formsrggjf",
- "version": 0
}, - {
- "id": 3,
- "type": "formcsfgof",
- "version": 0
}, - {
- "id": 4,
- "type": "formcsfgof",
- "version": 0
}, - {
- "id": 5,
- "type": "formsrggjf",
- "version": 0
}
], - "correlation": "5e417d08-903c-452e-a327-ab2e53eda1f3"
}
}Reads an organization by id or by code (+ optional tenant_code).
/user/v1/organization/readorganisation_id or organisation_code must be present.| organisation_id | string Organization id. At least one of organisation_id or organisation_code is required (see description above). |
| organisation_code | string Organization code. At least one of organisation_id or organisation_code is required (see description above). If used, an optional tenant_code query param further scopes the lookup. |
| tenant_code | string Optional tenant code, only used together with organisation_code. |
| X-auth-token required | string |
{- "responseCode": "OK",
- "message": "Organization fetched successfully.",
- "result": {
- "id": 1,
- "name": "Default Organization",
- "code": "default_code",
- "description": "Updated via replay script",
- "status": "ACTIVE",
- "org_admin": null,
- "parent_id": null,
- "related_orgs": [
- 999999999
], - "in_domain_visibility": null,
- "theming": null,
- "tenant_code": "default",
- "meta": null,
- "created_by": null,
- "updated_by": 19,
- "created_at": "2026-07-15T09:40:42.047Z",
- "updated_at": "2026-07-15T10:54:47.236Z",
- "deleted_at": null,
- "related_org_details": [ ]
}, - "meta": {
- "formsVersion": [
- {
- "id": 1,
- "type": "formsrggjf",
- "version": 0
}, - {
- "id": 2,
- "type": "formsrggjf",
- "version": 0
}, - {
- "id": 3,
- "type": "formcsfgof",
- "version": 0
}, - {
- "id": 4,
- "type": "formcsfgof",
- "version": 0
}, - {
- "id": 5,
- "type": "formsrggjf",
- "version": 0
}
], - "correlation": "764fc6a0-3b14-4dbd-9ffd-37c703b6f47f"
}
}Reads detailed organization info for an organization the caller belongs to.
/user/v1/organization/details/{id}| id required | integer Example: 1 Organization id. |
| X-auth-token required | string |
{- "responseCode": "OK",
- "message": "Organization fetched successfully.",
- "result": {
- "id": 1,
- "name": "Default Organization",
- "code": "default_code",
- "description": "Updated via replay script",
- "status": "ACTIVE",
- "meta": null,
- "registration_codes": [ ]
}, - "meta": {
- "formsVersion": [
- {
- "id": 1,
- "type": "formsrggjf",
- "version": 0
}, - {
- "id": 2,
- "type": "formsrggjf",
- "version": 0
}, - {
- "id": 3,
- "type": "formcsfgof",
- "version": 0
}, - {
- "id": 4,
- "type": "formcsfgof",
- "version": 0
}, - {
- "id": 5,
- "type": "formsrggjf",
- "version": 0
}
], - "correlation": "90ab213b-5e78-42cd-b9ea-292fd223819c"
}
}Adds one or more registration codes to an organization.
/user/v1/organization/addRegistrationCode/{id}id here is the organization code (not the numeric id).tenant_code in the request body is conditionally required only for ADMIN_ROLE callers - see addRegistrationCodeRequest.| id required | string Example: mentor112 Organization code. |
| X-auth-token required | string |
| registration_codes required | Array of strings List of registration codes to add. Must be a non-empty array. |
| tenant_code | string Tenant code. Conditionally required: only when the caller is a platform admin. For org-admins the tenant code is derived from the auth token instead. When absent for an admin caller, the request fails. |
{- "registration_codes": [
- "reg123"
], - "tenant_code": "default"
}{- "responseCode": "string",
- "message": "string",
- "meta": { }
}Removes one or more registration codes from an organization.
/user/v1/organization/removeRegistrationCode/{id}id here is the organization code (not the numeric id).tenant_code in the request body is conditionally required only for ADMIN_ROLE callers - see removeRegistrationCodeRequest.| id required | string Example: mentor112 Organization code. |
| X-auth-token required | string |
| registration_codes required | Array of strings List of registration codes to remove. Must be a non-empty array. |
| tenant_code | string Tenant code. Conditionally required: only when the caller is a platform admin. For org-admins the tenant code is derived from the auth token instead. When absent for an admin caller, the request fails. |
{- "registration_codes": [
- "reg123"
], - "tenant_code": "default"
}{- "responseCode": "string",
- "message": "string",
- "meta": { }
}Adds one or more related organization ids to an organization.
/user/v1/organization/addRelatedOrg/{id}related_orgs is optional; if omitted, it defaults to an empty list.| id required | integer Example: 1 Organization id. |
| X-auth-token required | string |
| related_orgs | Array of integers List of related organization IDs to associate. |
{- "related_orgs": [
- 2
]
}{- "responseCode": "OK",
- "message": "Organization updated successfully",
- "result": [ ],
- "meta": {
- "formsVersion": [
- {
- "id": 1,
- "type": "formsrggjf",
- "version": 0
}, - {
- "id": 2,
- "type": "formsrggjf",
- "version": 0
}, - {
- "id": 3,
- "type": "formcsfgof",
- "version": 0
}, - {
- "id": 4,
- "type": "formcsfgof",
- "version": 0
}, - {
- "id": 5,
- "type": "formsrggjf",
- "version": 0
}
], - "correlation": "b36a0dad-585e-4c91-a0aa-6248d550172c"
}
}Removes one or more related organization ids from an organization.
/user/v1/organization/removeRelatedOrg/{id}related_orgs is optional; if omitted, it defaults to an empty list.| id required | integer Example: 1 Organization id. |
| X-auth-token required | string |
| related_orgs | Array of integers List of related organization IDs to remove. |
{- "related_orgs": [
- 2
]
}{- "responseCode": "string",
- "message": "string",
- "meta": { }
}Handling organization role requests, bulk user invites, and org-scoped user administration.
Get a list of organization requests based on specified filters.
required.| X-auth-token required | string Access token of the org admin. |
object Arbitrary key/value filters merged directly into the DB query filter (no field allowlist in code). |
{- "filters": {
- "role": [
- 0
], - "status": [
- "string"
], - "handled_by": [
- 0
]
}
}{- "responseCode": "OK",
- "message": "Organization requests fetched successfully",
- "result": {
- "count": 4,
- "data": [
- {
- "id": 4,
- "requester_id": 22,
- "role": 5,
- "status": "REQUESTED",
- "organization_id": 1,
- "handled_by": null,
- "meta": { },
- "comments": null,
- "tenant_code": "default",
- "requester": {
- "id": 22,
- "name": "Nevil Mathew"
}
}
]
}, - "meta": {
- "formsVersion": [
- { }
], - "correlation": "fa379358-ee6b-4625-9038-aa4e3131b1e4"
}
}Update the status of an organization request.
/user/v1/org-admin/updateRequestStatus.required.| X-auth-token required | string Access token of the org admin. |
| request_id required | integer |
| status required | string The new status for the request. "APPROVED" and "REJECTED" are the recognized values that trigger a notification email; any other non-empty value updates the request status without sending an email. |
| comments | string Optional; not required by the validator. Stored as-is on the request record. |
{- "request_id": 12,
- "status": "APPROVED",
- "comments": "string"
}{- "responseCode": "string",
- "message": "string",
- "result": { },
- "meta": { }
}Get details of a specific organization request. The id is supplied as a URL path parameter.
| id required | integer Example: 12 ID of the organization role-change request. |
| X-auth-token required | string Access token of the org admin. |
{- "responseCode": "string",
- "message": "string",
- "result": { },
- "meta": { }
}Create multiple users in bulk using a CSV file (invite/upload flow).
/user/v1/org-admin/bulkUserCreate.required.| X-auth-token required | string Access token of the org admin. |
| file_path required | string The path to the uploaded CSV file containing user data. |
| upload_type required | string Enum: "INVITE" "UPLOAD" Type of bulk upload. |
{- "file_path": "path/to/uploaded-csv-file",
- "upload_type": "INVITE"
}{- "responseCode": "string",
- "message": "string",
- "result": {
- "id": 0,
- "input_path": "string",
- "status": "string",
- "created_by": 0,
- "type": "string",
- "tenant_code": "string",
- "created_at": "string",
- "updated_at": "string"
}, - "meta": { }
}Get a list of uploaded bulk invite CSV files.
required.| page | integer Page number for pagination. |
| limit | integer Number of items per page. |
| status | string Optional filter on file-upload status. |
| X-auth-token required | string Access token of the org admin. |
{- "responseCode": "OK",
- "message": "Bulk Invites CSV List Fetched Successfully",
- "result": {
- "count": 0,
- "data": [
- { }
]
}, - "meta": {
- "formsVersion": [
- {
- "id": 0,
- "type": "string",
- "version": 0
}
], - "correlation": "194003ae-d4a6-4af7-8348-508118249403"
}
}Deactivate one or more users in the org admin's organization by ID and/or email, passed as arrays in the request body.
required.ids or emails must be provided; requests with neither (or with both empty) are rejected before being processed - see the 422 response.| X-auth-token required | string Access token of the org admin. |
| ids required | Array of integers Array of user IDs to deactivate. |
| emails | Array of strings <email> Array of user email addresses to deactivate. |
{- "ids": [
- 12,
- 13
]
}{- "responseCode": "string",
- "message": "string",
- "result": {
- "updated_by_ids": [
- 0
], - "updated_by_emails": [
- 0
]
}, - "meta": { }
}Inherit an entity type from the default organization into the caller's organization.
required.| X-auth-token required | string Access token of the org admin. |
| entity_type_value required | string |
| target_entity_type_label required | string |
{- "entity_type_value": "categories",
- "target_entity_type_label": "training"
}{- "responseCode": "string",
- "message": "string",
- "result": {
- "id": 0,
- "value": "string",
- "label": "string",
- "status": "string",
- "created_by": 0,
- "updated_by": 0,
- "allow_filtering": true,
- "data_type": "string",
- "organization_id": 0,
- "organization_code": "string",
- "parent_id": 0,
- "allow_custom_entities": true,
- "has_entities": true,
- "model_names": [
- "string"
], - "created_at": "string",
- "updated_at": "string",
- "deleted_at": "string"
}, - "meta": { }
}Assign roles to a user within the caller's own organization.
| id required | integer Example: 12 ID of the user whose roles are being updated. |
| X-auth-token required | string Access token. |
| organization_id | integer |
| roles | Array of strings |
{- "organization_id": 2,
- "roles": [
- "mentor"
]
}{- "responseCode": "string",
- "message": "string",
- "result": [
- null
], - "meta": { }
}Bulk-create users via an uploaded CSV, with editable-field and upload-type controls (tenant-code-aware variant of bulkUserCreate).
| X-auth-token required | string Access token. |
| file_path | string |
Array of strings or string Accepted as an array, or a comma-separated string (split in the service). | |
| upload_type | string Case-insensitive; normalized to uppercase. |
{- "file_path": "path/to/uploaded-csv-file",
- "editable_fields": [
- "string"
], - "upload_type": "string"
}{- "responseCode": "string",
- "message": "string",
- "result": { },
- "meta": { }
}Use this API to create a new organization feature.
Endpoint: /user/v1/organization-feature/create (POST).
Caller must have the admin or org_admin role; otherwise the
request fails with USER_IS_NOT_ADMIN.
feature_code, feature_name and display_order are mandatory and
cannot be empty. display_order must be a non-empty string of
digits.
If the caller has the full admin role, the organizationcode and
tenantcode headers (when present) override the organization/tenant
resolved from the auth token. For an org_admin caller these headers
are ignored and the token's own organization_code/tenant_code are
used. Either way, if organization_code or tenant_code cannot be
resolved, the request fails with
ORGANIZATION_CODE_OR_TENANT_CODE_NOT_FOUND.
If the caller is not a full admin and is creating the feature outside
the tenant's default organization, the tenant's default organization
must already have an enabled copy of the same feature_code. If none
exists, the request fails with FEATURE_NOT_FOUND. If one exists, the
client-supplied display_order is overridden by the default
organization's display_order value. Full admins and
default-organization callers skip this check entirely.
If roles is supplied, every title must already exist for the
tenant — otherwise the request fails with ROLE_NOT_FOUND. On success,
one feature_role_mapping row is created per role title.
A duplicate (feature_code, organization_code, tenant_code) is rejected as ORGANIZATION_FEATURE_EXISTS. A feature_code that does not correspond to any known feature also fails with FEATURE_NOT_FOUND (same message as the default-org check above, but a distinct cause).
Fields such as organization_code, tenant_code, created_by,
updated_by, created_at, updated_at and deleted_at are always
server-set and cannot be provided by the caller; any such values in
the request body are ignored.
The X-auth-token is mandatory and cannot be empty or null. '
| X-auth-token required | string Access token of the logged-in user. |
| organizationcode | string Example: shikshagraha Organization code override. Only honored when the caller has the full |
| tenantcode | string Example: default Tenant code override. Only honored when the caller has the full |
| feature_code required | string Unique code identifying the feature. |
| feature_name required | string Human readable name of the feature. |
| display_order required | integer Ordering position of the feature. Must contain only digits. |
| roles | Array of strings Optional list of role titles to map to this feature. Every title must already exist for the tenant, otherwise the request fails with ROLE_NOT_FOUND. |
| enabled | boolean Whether the feature is enabled for the organization. |
| icon | string or null Icon path/reference for the feature. |
| redirect_url | string or null Redirect URL associated with the feature. |
| translations | object or null Localized translations for the feature. |
| meta | object or null Additional metadata for the feature. |
{- "feature_code": "feat3t7os9otwv",
- "feature_name": "Replay Feature",
- "display_order": 1
}{- "responseCode": "OK",
- "message": "Organization feature created successfully",
- "result": {
- "enabled": false,
- "feature_code": "feat3t7os9otwv",
- "feature_name": "Replay Feature",
- "display_order": 1,
- "organization_code": "default_code",
- "tenant_code": "default",
- "created_by": 23,
- "updated_at": "2026-07-15T10:56:26.052Z",
- "created_at": "2026-07-15T10:56:26.052Z",
- "icon": null,
- "redirect_url": null,
- "translations": null,
- "meta": null,
- "updated_by": null,
- "deleted_at": null
}, - "meta": {
- "formsVersion": [
- {
- "id": 1,
- "type": "formsrggjf",
- "version": 0
}, - {
- "id": 2,
- "type": "formsrggjf",
- "version": 0
}, - {
- "id": 3,
- "type": "formcsfgof",
- "version": 0
}, - {
- "id": 4,
- "type": "formcsfgof",
- "version": 0
}, - {
- "id": 5,
- "type": "formsrggjf",
- "version": 0
}, - {
- "id": 6,
- "type": "formhvedht",
- "version": 0
}, - {
- "id": 7,
- "type": "formsrggjf",
- "version": 0
}, - {
- "id": 8,
- "type": "formcsfgof",
- "version": 0
}, - {
- "id": 9,
- "type": "formhvedht",
- "version": 0
}
], - "correlation": "5ac13e0f-8926-4ee9-ae00-3a3c2fd4373d"
}
}Use this API to update an existing organization feature.
Endpoint: /user/v1/organization-feature/update/{id} (PATCH, or
any HTTP method other than DELETE). Despite the generic route
param name id, the value is matched against the feature's
feature_code, not a numeric id.
Caller must have the admin or org_admin role, same as create;
otherwise USER_IS_NOT_ADMIN. As with create, only the full admin
role gets organizationcode/tenantcode header overrides.
Only feature_name is mandatory on this branch; feature_code,
organization_code, tenant_code, and the audit/timestamp fields
cannot be changed via update even if supplied in the body.
If roles is supplied (as an array), all existing role mappings
for this feature/org/tenant are replaced with the new set — every
title must exist for the tenant or the request fails with
ROLE_NOT_FOUND.
If the update query matches zero rows, the request fails with FAILED_TO_UPDATE_ORG_FEATURE.
If feature_code's foreign-key constraint is violated, the
request fails with a normal FEATURE_NOT_FOUND response. Any other
unexpected error may instead reach the client as a generic 500
error.
The X-auth-token is mandatory and cannot be empty or null. '
| id required | string Example: mitra The organization feature's |
| X-auth-token required | string Access token of the logged-in user. |
| organizationcode | string Organization code override. Only honored when the caller has the full |
| tenantcode | string Tenant code override. Only honored when the caller has the full |
| feature_name required | string Human readable name of the feature. |
| display_order | integer Ordering position of the feature. Optional on update; must contain only digits when supplied. |
| roles | Array of strings Optional list of role titles to map to this feature. When supplied, ALL existing feature_role_mapping rows for this feature/org/tenant are deleted and replaced with the new set. Every title must already exist for the tenant, otherwise the request fails with ROLE_NOT_FOUND. |
| enabled | boolean Whether the feature is enabled for the organization. |
| icon | string Icon path/reference for the feature. |
| redirect_url | string or null Redirect URL associated with the feature. |
| translations | object or null Localized translations for the feature. |
| meta | object Additional metadata for the feature. |
{- "enabled": true,
- "feature_name": "Mitra",
- "meta": {
- "icon": "/assets/images/ic_mitra.svg",
- "theme": {
- "primaryColor": "#572E91",
- "secondaryColor": "#FF9911"
}, - "title": "MITRA",
- "sameOrigin": true
}
}{- "responseCode": "OK",
- "message": "ORG_FEATURE_UPDATED_SUCCESSFULLY",
- "result": { },
- "meta": { }
}Use this API to delete an organization feature.
Endpoint: /user/v1/organization-feature/update/{id} (DELETE).
Same URL as the update operation. As with update, the id path
param value is matched against the feature's feature_code, not a
numeric id.
No request body is used by this operation.
Caller must have the admin or org_admin role, same as update;
otherwise USER_IS_NOT_ADMIN. Same org/tenant code header override
semantics as update.
The X-auth-token is mandatory and cannot be empty or null. '
| id required | string Example: 3 The organization feature's |
| X-auth-token required | string Access token of the logged-in user. |
| organizationcode | string Organization code override. Only honored when the caller has the full |
| tenantcode | string Tenant code override. Only honored when the caller has the full |
{- "responseCode": "OK",
- "message": "ORG_FEATURE_DELETED_SUCCESSFULLY",
- "result": { },
- "meta": { }
}Use this API to fetch the list of organization features visible to the caller.
Endpoint: /user/v1/organization-feature/read (GET, no id path
param).
If the caller has the full admin role, the organizationcode and
tenantcode headers (when present) override the organization/tenant
resolved from the token. For any other role, the token's own
organization_code/tenant_code are used. If organization_code or
tenant_code cannot be resolved, the request fails with
ORGANIZATION_CODE_OR_TENANT_CODE_NOT_FOUND.
Features are fetched for both the caller's organization and the tenant's default organization and merged, with the caller's own organization''s copy of a feature taking precedence over the default organization''s copy when both exist (same feature_code).
If the caller''s roles do NOT include admin, org_admin, or tenant_admin, the merged list is further filtered down to only features reachable via the caller''s roles (checked against both the caller''s organization and the default organization); if no matching role mappings exist at all, the result is an empty list.
Results are sorted by display_order ascending. Each row''s icon
(if present) is resolved to a downloadable URL.
The X-auth-token is mandatory and cannot be empty or null. '
| X-auth-token required | string Access token of the logged-in user. |
| organizationcode | string Example: default_code Organization code override. Only honored when the caller has the full |
| tenantcode | string Example: shikshalokam Tenant code override. Only honored when the caller has the full |
{- "responseCode": "OK",
- "message": "Organization Feature fetched successfully.",
- "result": [
- {
- "organization_code": "default_code",
- "feature_code": "programs",
- "tenant_code": "default",
- "enabled": true,
- "feature_name": "Programs",
- "icon": null,
- "redirect_url": null,
- "translations": null,
- "meta": null,
- "display_order": 1
}, - {
- "organization_code": "default_code",
- "feature_code": "feat3t57y7bcbf",
- "tenant_code": "default",
- "enabled": false,
- "feature_name": "Replay Feature",
- "icon": null,
- "redirect_url": null,
- "translations": null,
- "meta": null,
- "display_order": 1
}, - {
- "organization_code": "default_code",
- "feature_code": "feat3t6gl4v2qo",
- "tenant_code": "default",
- "enabled": false,
- "feature_name": "Replay Feature",
- "icon": null,
- "redirect_url": null,
- "translations": null,
- "meta": null,
- "display_order": 1
}, - {
- "organization_code": "default_code",
- "feature_code": "feat3t7os9otwv",
- "tenant_code": "default",
- "enabled": false,
- "feature_name": "Replay Feature",
- "icon": null,
- "redirect_url": null,
- "translations": null,
- "meta": null,
- "display_order": 1
}, - {
- "organization_code": "default_code",
- "feature_code": "project",
- "tenant_code": "default",
- "enabled": true,
- "feature_name": "Project",
- "icon": null,
- "redirect_url": null,
- "translations": null,
- "meta": null,
- "display_order": 2
}, - {
- "organization_code": "default_code",
- "feature_code": "survey",
- "tenant_code": "default",
- "enabled": true,
- "feature_name": "Survey",
- "icon": null,
- "redirect_url": null,
- "translations": null,
- "meta": null,
- "display_order": 3
}, - {
- "organization_code": "default_code",
- "feature_code": "observation",
- "tenant_code": "default",
- "enabled": true,
- "feature_name": "Observation",
- "icon": null,
- "redirect_url": null,
- "translations": null,
- "meta": null,
- "display_order": 4
}, - {
- "organization_code": "default_code",
- "feature_code": "reports",
- "tenant_code": "default",
- "enabled": true,
- "feature_name": "Reports",
- "icon": null,
- "redirect_url": null,
- "translations": null,
- "meta": null,
- "display_order": 5
}, - {
- "organization_code": "default_code",
- "feature_code": "mentoring",
- "tenant_code": "default",
- "enabled": true,
- "feature_name": "Mentoring",
- "icon": null,
- "redirect_url": null,
- "translations": null,
- "meta": null,
- "display_order": 6
}, - {
- "organization_code": "default_code",
- "feature_code": "mitra",
- "tenant_code": "default",
- "enabled": true,
- "feature_name": "MITRA",
- "icon": null,
- "redirect_url": null,
- "translations": null,
- "meta": null,
- "display_order": 7
}, - {
- "organization_code": "default_code",
- "feature_code": "learn",
- "tenant_code": "default",
- "enabled": true,
- "feature_name": "Learn",
- "icon": null,
- "redirect_url": null,
- "translations": null,
- "meta": null,
- "display_order": 8
}, - {
- "organization_code": "default_code",
- "feature_code": "scp",
- "tenant_code": "default",
- "enabled": true,
- "feature_name": "SCP",
- "icon": null,
- "redirect_url": null,
- "translations": null,
- "meta": null,
- "display_order": 9
}
], - "meta": {
- "formsVersion": [
- {
- "id": 1,
- "type": "formsrggjf",
- "version": 0
}, - {
- "id": 2,
- "type": "formsrggjf",
- "version": 0
}, - {
- "id": 3,
- "type": "formcsfgof",
- "version": 0
}, - {
- "id": 4,
- "type": "formcsfgof",
- "version": 0
}, - {
- "id": 5,
- "type": "formsrggjf",
- "version": 0
}, - {
- "id": 6,
- "type": "formhvedht",
- "version": 0
}, - {
- "id": 7,
- "type": "formsrggjf",
- "version": 0
}, - {
- "id": 8,
- "type": "formcsfgof",
- "version": 0
}, - {
- "id": 9,
- "type": "formhvedht",
- "version": 0
}
], - "correlation": "fd559cca-af5c-4c59-98df-e321eebafa7b"
}
}Use this API to fetch a single organization feature by feature code.
Endpoint: /user/v1/organization-feature/read/{id} (GET). As with
update, the id path param value is matched against the feature's
feature_code, not a numeric id.
Header/role semantics for resolving organization_code/tenant_code are identical to the list operation above.
The feature is first looked up under the caller's own organization_code; if not found, it falls back to the tenant's default organization. If still not found, the request fails with ORG_FEATURE_NOT_FOUND.
Unlike the list operation, this lookup does not exclude created_by/updated_by/timestamp columns, so the response shape may differ from a list item.
The X-auth-token is mandatory and cannot be empty or null. '
| id required | string Example: mitra The organization feature's |
| X-auth-token required | string Access token of the logged-in user. |
| organizationcode | string Organization code override. Only honored when the caller has the full |
| tenantcode | string Tenant code override. Only honored when the caller has the full |
{- "responseCode": "OK",
- "message": "ORG_FEATURE_FETCHED",
- "result": { },
- "meta": { }
}This API is associated with entity creation.
/user/v1/entity/create.required.| X-auth-token required | string To make use of the API, you require X-auth-token. This is Available in login API Response. |
| value required | string Alphanumeric characters and spaces allowed. |
| label required | string Alphanumeric with spaces allowed. |
| type required | string Entity type classification. Must be uppercase with no spaces (e.g. SYSTEM). |
| entity_type_id required | integer |
| status | string Optional status of the entity. Must be uppercase with no spaces when provided. |
{- "value": "AP",
- "label": "Andhra Pradesh",
- "type": "SYSTEM",
- "entity_type_id": 4,
- "status": "ACTIVE"
}{- "responseCode": "OK",
- "message": "Entity created successfully",
- "result": {
- "status": "ACTIVE",
- "id": 789,
- "value": "testval",
- "label": "Test Value",
- "type": "SYSTEM",
- "entity_type_id": 26,
- "created_by": 23,
- "updated_by": 23,
- "tenant_code": "default",
- "organization_code": "default_code",
- "updated_at": "2026-07-15T10:56:24.039Z",
- "created_at": "2026-07-15T10:56:24.039Z",
- "deleted_at": null
}, - "meta": {
- "formsVersion": [
- {
- "id": 1,
- "type": "formsrggjf",
- "version": 0
}, - {
- "id": 2,
- "type": "formsrggjf",
- "version": 0
}
], - "correlation": "243b2c16-47ba-477a-9521-ef6b337c9dfe"
}
}This API is associated with updating an entity.
/user/v1/entity/update/{id}.id is supplied as a path parameter.| id required | integer Example: 2 Please append a valid user entity ID to the request URL. |
| X-auth-token required | string To make use of the API, you require X-auth-token. This is Available in login API Response. |
| value | string Alphanumeric characters and spaces allowed. |
| label | string Alphanumeric with spaces allowed. |
| status | string Must be uppercase with no spaces when provided. |
| type | string Entity type classification (uppercase, no spaces). |
| entity_type_id | number The ID of the entity type. |
{- "value": "en",
- "label": "English",
- "status": "ACTIVE",
- "entity_type_id": 1
}{- "responseCode": "string",
- "message": "string",
- "result": [
- 0
]
}This API retrieves a user entity by identifier.
/user/v1/entity/read.id, or the pair (value + entity_type_id). If neither is provided the request is rejected.?id=1.?value=AP&entity_type_id=4.| id | integer Examples:
The entity ID. Provide either |
| value | string Examples:
The entity value. Must be accompanied by |
| entity_type_id | integer Examples:
The entity type ID. Used together with |
| X-auth-token required | string To use the API, include X-auth-token. This is available in the login API response. |
{- "responseCode": "string",
- "message": "string",
- "result": [
- {
- "id": 0,
- "entity_type_id": 0,
- "value": "string",
- "label": "string",
- "status": "string",
- "type": "string",
- "created_by": 0,
- "updated_by": 0,
- "created_at": "string",
- "updated_at": "string",
- "deleted_at": "string"
}
]
}Use this API to get the list of a user entities.
/user/v1/entity/list required | page | number Example: page=1 Please add page number |
| limit | number Example: limit=10 Number of records to limit |
| search | string Example: search=teacher search text |
| entity_type_id required | number Example: entity_type_id=1 entity_type_id |
| X-auth-token required | string To use this API, you require an X-auth-token, which is available in the login API Response. |
{- "responseCode": "string",
- "message": "string",
- "result": {
- "count": 0,
- "data": [
- {
- "id": 0,
- "entity_type_id": 0,
- "value": "string",
- "label": "string",
- "status": "string",
- "type": "string",
- "created_by": 0,
- "created_at": "string"
}
]
}
}This API is associated with deleting an entity.
/user/v1/entity/delete/{id}.required.| id required | integer Example: 31 Please append a valid user entity ID to the request URL. |
| X-auth-token required | string To use the API, include X-auth-token. This is available in the login API response. |
{- "responseCode": "OK",
- "message": "Entity deleted successfully",
- "result": [ ],
- "meta": {
- "formsVersion": [
- {
- "id": 1,
- "type": "formsrggjf",
- "version": 0
}, - {
- "id": 2,
- "type": "formsrggjf",
- "version": 0
}
], - "correlation": "60cf8ae2-9000-44a8-844d-d91cc059dd3b"
}
}Use this API to create a user entity type.
/user/v1/entity-type/createrequired.| X-auth-token required | string Access token of the user who is already a mentee of the organization. |
| value required | string Unique identifier for the entity type. Must not contain spaces. |
| label required | string Descriptive label for the entity type. |
| data_type required | string Data type of the entity type value (e.g. STRING, ARRAY[STRING]). |
| model_names required | Array of strings One or more model names this entity type applies to. Must be a non-empty array. |
| allow_filtering | boolean Not allowed on create. This field must be omitted; sending any truthy value fails validation. |
{- "value": "ln",
- "label": "Languages",
- "data_type": "STRING",
- "model_names": [
- "User"
], - "allow_filtering": true
}{- "responseCode": "OK",
- "message": "Entity type created successfully.",
- "result": {
- "status": "ACTIVE",
- "allow_filtering": false,
- "allow_custom_entities": true,
- "has_entities": true,
- "required": false,
- "regex": null,
- "external_entity_type": false,
- "id": 26,
- "value": "lang_utbgvs",
- "label": "Replay Test Entity Type",
- "data_type": "STRING",
- "model_names": [
- "User"
], - "created_by": 23,
- "updated_by": 23,
- "organization_code": "default_code",
- "organization_id": 1,
- "tenant_code": "default",
- "updated_at": "2026-07-15T10:56:23.972Z",
- "created_at": "2026-07-15T10:56:23.972Z",
- "parent_id": null,
- "meta": null,
- "deleted_at": null
}, - "meta": {
- "formsVersion": [
- {
- "id": 1,
- "type": "formsrggjf",
- "version": 0
}, - {
- "id": 2,
- "type": "formsrggjf",
- "version": 0
}, - {
- "id": 3,
- "type": "formcsfgof",
- "version": 0
}, - {
- "id": 4,
- "type": "formcsfgof",
- "version": 0
}, - {
- "id": 5,
- "type": "formsrggjf",
- "version": 0
}
], - "correlation": "a6540689-f5db-445c-bc80-5d4149d9011d"
}
}Use this API to update an entity type.
/user/v1/entity-type/update/{id}required.| id required | integer Example: 1 Please append a valid entity type ID to the request URL. |
| X-auth-token required | string Access token obtained from the login API response. |
| value | string Unique identifier for the entity type. Optional on update. |
| label | string Descriptive label for the entity type. Optional on update. |
| status | string Status of the entity type. Optional on update. |
| data_type required | string Data type of the entity type value. |
| model_names required | Array of strings One or more model names this entity type applies to. Must be a non-empty array, and each item must be one of the currently supported model names. |
{- "value": "ln",
- "label": "Languages",
- "status": "ACTIVE",
- "data_type": "STRING",
- "model_names": [
- "User"
]
}{- "responseCode": "string",
- "message": "string",
- "result": {
- "id": 0,
- "value": "string",
- "label": "string",
- "status": "string",
- "data_type": "string",
- "allow_filtering": true,
- "has_entities": true
}, - "meta": {
- "correlation": "string"
}
}Use this API to retrieve a list of entity types.
/user/v1/entity-type/readvalue is sent in the body, all system entity types for the organization are returned (flat array).value is sent, matching user entity types (with their entities) are returned under result.entity_types.type, deleted, and status query parameters are also accepted; see the parameter descriptions below for details.| type | string Optional. Filter by entity type name. |
| deleted | boolean Optional. Filter by deleted status. |
| status | string Optional. Filter by status. |
| X-auth-token required | string To make use of the API, you require X-auth-token. This is available in the login API response. |
| value | Array of strings Optional. Entity type value(s) to filter user entity types by. |
| read_user_entity | boolean |
{ }{- "responseCode": "OK",
- "message": "Entity type fetched successfully",
- "result": [
- {
- "value": "preferred_language",
- "label": "Preferred Language",
- "id": 1,
- "organization_code": "default_code"
}, - {
- "value": "phone_code",
- "label": "Phone Code",
- "id": 2,
- "organization_code": "default_code"
}, - {
- "value": "name",
- "label": "Name",
- "id": 3,
- "organization_code": "default_code"
}, - {
- "value": "languages",
- "label": "Languages",
- "id": 4,
- "organization_code": "default_code"
}, - {
- "value": "location",
- "label": "Location",
- "id": 5,
- "organization_code": "default_code"
}
], - "meta": {
- "formsVersion": [
- {
- "id": 1,
- "type": "formsrggjf",
- "version": 0
}, - {
- "id": 2,
- "type": "formsrggjf",
- "version": 0
}, - {
- "id": 3,
- "type": "formcsfgof",
- "version": 0
}, - {
- "id": 4,
- "type": "formcsfgof",
- "version": 0
}, - {
- "id": 5,
- "type": "formsrggjf",
- "version": 0
}
], - "correlation": "77d8acc0-7f10-4447-be5a-68bf46bac384"
}
}This API is associated with deleting an entity type.
/user/v1/entity-type/delete/{id}required.| id required | integer Example: 31 Please append a valid entity type ID to the request URL. |
| X-auth-token required | string To use the API, include X-auth-token. This is available in the login API response. |
{- "responseCode": "string",
- "message": "string"
}This API is associated with creating a form.
/user/v1/form/createrequired must have valid values.id, version, and organization_id in the request body are ignored server-side (stripped before validation) even if supplied.| X-auth-token required | string To make use of the API, you require X-auth-token. This is Available in login API Response. |
| type required | string^[A-Za-z]+$ The type of the form. Letters only. |
| sub_type required | string^[A-Za-z]+$ The sub-type or category of the form. Letters only. |
required | object The main data structure for the form. |
{- "type": "profile",
- "sub_type": "profileForm",
- "data": {
- "template_name": "defaultTemplate",
- "fields": {
- "controls": [
- {
- "name": "name",
- "label": "name",
- "value": "",
- "class": "ion-margin",
- "type": "text",
- "position": "floating",
- "validators": {
- "required": true,
- "minLength": 10
}
}
]
}
}
}{- "responseCode": "OK",
- "message": "Form created successfully",
- "result": [ ],
- "meta": {
- "formsVersion": [
- {
- "id": 1,
- "type": "formsrggjf",
- "version": 0
}, - {
- "id": 2,
- "type": "formsrggjf",
- "version": 0
}, - {
- "id": 3,
- "type": "formcsfgof",
- "version": 0
}, - {
- "id": 4,
- "type": "formcsfgof",
- "version": 0
}, - {
- "id": 5,
- "type": "formsrggjf",
- "version": 0
}, - {
- "id": 6,
- "type": "formhvedht",
- "version": 0
}
], - "correlation": "ff2b746a-2ede-448f-b5f9-0277d643b64f"
}
}This API is associated with updating a form.
/user/v1/form/update/{formId}required must have valid values.id, version, and organization_id in the request body are ignored server-side (stripped before validation) even if supplied.data.template_name and data.fields are only valid together.| formId required | integer Example: 1 Please append a valid form ID to the request URL. |
| X-auth-token required | string To make use of the API, you require X-auth-token. This is Available in login API Response. |
| type required | string^[A-Za-z]+$ The type of the form. Letters only. |
| sub_type required | string^[A-Za-z]+$ The sub-type or category of the form. Letters only. |
object The main data structure for the form. |
{- "type": "profile",
- "sub_type": "profileForm",
- "data": {
- "template_name": "defaultTemplate",
- "fields": {
- "controls": [
- {
- "name": "name",
- "label": "name",
- "value": "",
- "class": "ion-margin",
- "type": "text",
- "position": "floating",
- "validators": {
- "required": true,
- "minLength": 10
}
}
]
}
}
}{- "responseCode": "string",
- "message": "string",
- "result": [
- "string"
]
}This API is associated with retrieving form details.
/user/v1/form/read/{formId}required.formId and an empty body instead returns the full list of form versions (see readAllFormVersions200Response).| formId required | integer Example: 2 Please append a valid form Id to the Request URL. Note: the underlying controller treats this as optional (falls back to a body-based type/sub_type lookup, or to listing all form versions) but this documented route always supplies it — see the description above. |
| X-auth-token required | string To make use of the API, you require X-auth-token. This is Available in login API Response. |
Request object for retrieving form details. The request is handled differently depending on how it arrives — modeled below as oneOf per branch. Branch 1: a formId path parameter is supplied — the request body should be empty. Branch 2: no formId path parameter, but a non-empty body — type and sub_type are both required together. Branch 3: no formId and an empty body — the endpoint instead returns the full list of form versions, which is a materially different response shape (see readAllFormVersions200Response). Because formId is a path parameter, branch 1 and branch 3 both correspond to an empty request body — the request body schema alone cannot distinguish them; the path parameter does.
{ }{- "responseCode": "string",
- "message": "string",
- "result": {
- "type": "string",
- "sub_type": "string",
- "updated_at": "string",
- "created_at": "string",
- "id": "string",
- "data": {
- "template_name": "string",
- "fields": {
- "controls": [
- {
- "name": "string",
- "label": "string",
- "value": "string",
- "class": "string",
- "type": "string",
- "position": "string",
- "validators": {
- "required": true,
- "minLength": 0
}
}
]
}
}
}
}Use this API to create a new feature.
Endpoint: /user/v1/feature/update (POST, no id path param). The
controller's single update method branches into create logic when
no id path param is supplied — see controllers/v1/feature.js#update.
label, code and display_order are mandatory and cannot be empty
or null on create (see conditionalNotes in validator-fields.json:
code and display_order are only required inside the
if (!isUpdate) branch of validators/v1/feature.js#update).
label must be non-empty and may only contain letters (regex
^[A-Za-z]*$ combined with a notEmpty() check).
display_order must be a non-empty string of digits on create.
The request body is passed through filterRequestBody with the
feature.create blacklist (constants/blacklistConfig.js), which
strips any client-supplied created_by, updated_by, created_at,
updated_at and deleted_at — these are always server-set and
cannot be provided by the caller.
The X-auth-token is mandatory and cannot be empty or null. '
| X-auth-token required | string Access token of the logged-in user. |
| label required | string Human-readable feature label. Must contain only letters. |
| code required | string Unique feature code. |
| display_order required | string^\d+$ Sort order used when listing features. Must be provided as a non-empty string of digits when creating a feature. |
| icon | string or null Optional icon path. Not enforced by the validator; present on the persisted model. |
| description | string or null Optional description. Not enforced by the validator; present on the persisted model. |
| meta | object or null Optional metadata. Not enforced by the validator; present on the persisted model. |
{- "label": "ReplayFeature",
- "code": "feat3t7os9otwv",
- "display_order": "1"
}{- "responseCode": "OK",
- "message": "Feature created successfully",
- "result": {
- "code": "feat3t7os9otwv",
- "label": "ReplayFeature",
- "display_order": 1,
- "created_by": 23,
- "updated_at": "2026-07-15T10:56:25.820Z",
- "created_at": "2026-07-15T10:56:25.820Z",
- "icon": null,
- "description": null,
- "meta": null,
- "updated_by": null,
- "deleted_at": null
}, - "meta": {
- "correlation": "d8daf050-1722-4db2-afa3-1d7e0d067f6a"
}
}Use this API to update an existing feature.
Endpoint: /user/v1/feature/update/{id} (POST). Despite the
generic router param name id, the value is matched against the
feature's code column (services/feature.js#update calls
featureQueries.findByCode/updates { code: code }) — captured
traffic keys this endpoint as POST /user/v1/feature/update/:code.
Pass the feature's code value here, not a numeric id.
Only label is mandatory on update; code and display_order are
NOT required on this branch (validator-fields.json's required:true
for those fields applies only to the create branch).
The request body is passed through filterRequestBody with the
feature.update blacklist (constants/blacklistConfig.js), which
strips code, created_by, updated_by, created_at,
updated_at and deleted_at from the body before it reaches the
service layer. This means code cannot be changed via update —
any code sent in the body is silently dropped, not merely
optional.
The X-auth-token is mandatory and cannot be empty or null. '
| id required | string Example: feat3t7os9otwv The feature's |
| X-auth-token required | string Access token of the logged-in user. |
| label required | string Human-readable feature label. Must contain only letters. |
| display_order | string^\d+$ Optional. Sort order used when listing features. Must be a non-empty string of digits. |
| icon | string or null |
| description | string or null |
| meta | object or null |
{- "label": "ReplayFeatureRenamed"
}{- "responseCode": "string",
- "message": "string",
- "result": [
- null
], - "meta": { }
}Use this API to fetch a paginated list of features.
Endpoint: /user/v1/feature/list.
Pagination is applied by the shared pagination middleware
(middlewares/pagination.js), not by a feature-specific validator:
page defaults to 1, limit defaults to 100 (max 100), and
search defaults to "" and is matched against the feature code
column with a case-insensitive LIKE %search%.
Results are ordered by display_order ascending. Each row''s icon
(if present) is resolved to a downloadable URL.
The X-auth-token is mandatory and cannot be empty or null. '
| page | integer Example: page=1 Page number. Defaults to 1. |
| limit | integer Example: limit=100 Page size. Defaults to 100, capped at 100. |
| search | string Case-insensitive substring filter matched against the feature |
| X-auth-token required | string Access token of the logged-in user. |
{- "responseCode": "OK",
- "message": "Feature fetched successfully.",
- "result": {
- "data": [
- {
- "code": "programs",
- "label": "Programs",
- "description": "program capability",
- "icon": null,
- "meta": null,
- "display_order": 1
}, - {
- "code": "feat3t7os9otwv",
- "label": "ReplayFeature",
- "description": null,
- "icon": null,
- "meta": null,
- "display_order": 1
}, - {
- "code": "project",
- "label": "Project",
- "description": "Project capability",
- "icon": null,
- "meta": null,
- "display_order": 2
}
], - "count": 10
}, - "meta": {
- "correlation": "f95a1b56-dd1d-42e6-8ebf-6a7141ca0ecd"
}
}Use this API to delete a feature.
Endpoint: /user/v1/feature/delete/{id} (DELETE). As with update,
the id path param value is matched against the feature's code
column (services/feature.js#delete calls findByCode/
deleteByCode) — captured traffic keys this endpoint as
DELETE /user/v1/feature/delete/:code.
The X-auth-token is mandatory and cannot be empty or null. '
| id required | string Example: feat3t7os9otwv The feature's |
| X-auth-token required | string Access token of the logged-in user. |
{- "responseCode": "OK",
- "message": "FEATURE_DELETED_SUCCESSFULLY",
- "result": [ ],
- "meta": {
- "correlation": "e2087271-cb63-482c-a69d-8aab895061c6"
}
}Creates a notification template.
/user/v1/notification/template.ADMIN, ORG_ADMIN or TENANT_ADMIN roles.type, code, subject and body are mandatory and cannot be empty or null.code must be unique per organization + tenant.| X-auth-token required | string Access token required to use the API. Available in the login API response. |
| type required | string Enum: "sms" "email" "emailHeader" "emailFooter" Type of the notification template. |
| code required | string Unique code for the notification template (unique per organization + tenant). |
| subject required | string Subject of the email. |
| body required | string Body of the notification template. |
| email_header | string Email header content (code of an emailHeader template). |
| email_footer | string Email footer content (code of an emailFooter template). |
{- "type": "email",
- "code": "tl-email-invite",
- "subject": "Hi Welcome Back",
- "body": "<p>Dear User,</p> Welcome back to mentorEd",
- "email_header": "email_header",
- "email_footer": "email_footer"
}{- "responseCode": "OK",
- "message": "Notification template created successfully",
- "result": {
- "status": "ACTIVE",
- "id": 126,
- "type": "email",
- "code": "tmpl_3t7oyoi82g",
- "subject": "Replay Test Subject",
- "body": "<p>Replay test body</p>",
- "organization_code": "default_code",
- "tenant_code": "default",
- "created_by": "23",
- "updated_at": "2026-07-15T10:56:26.206Z",
- "created_at": "2026-07-15T10:56:26.206Z",
- "email_header": null,
- "email_footer": null,
- "updated_by": null,
- "deleted_at": null
}, - "meta": {
- "formsVersion": [
- {
- "id": 1,
- "type": "formsrggjf",
- "version": 0
}, - {
- "id": 2,
- "type": "formsrggjf",
- "version": 0
}, - {
- "id": 3,
- "type": "formcsfgof",
- "version": 0
}
], - "correlation": "42111943-7221-49cb-81fe-c0afcc974180"
}
}Fetches notification templates for the caller's organization + tenant.
Endpoint: /user/v1/notification/template.
When called with no id path param and no code query param, all
templates are returned.
Optionally filter by code and/or type query params. If no template
matches, the default organization's templates are returned as a fallback.
| code | string Filter by template code. |
| type | string Enum: "sms" "email" "emailHeader" "emailFooter" Filter by template type. |
| X-auth-token required | string Access token required to use the API. Available in the login API response. |
{- "responseCode": "OK",
- "message": "Notification template fetched successfully",
- "result": [
- {
- "id": 1,
- "type": "email",
- "code": "generic_invite",
- "subject": "Welcome Aboard as a {roles}",
- "body": "<p>Dear {name},</p> We are delighted to inform you...",
- "status": "ACTIVE",
- "email_header": "email_header",
- "email_footer": "email_footer",
- "created_by": null,
- "updated_by": null,
- "tenant_code": "default",
- "organization_code": "default_code",
- "created_at": "2026-07-15T09:40:39.000Z",
- "updated_at": "2026-07-15T09:40:40.000Z",
- "deleted_at": null
}, - {
- "id": 22,
- "type": "sms",
- "code": "emailotp",
- "subject": null,
- "body": "Your {app_name} OTP to reset your password is {otp}. Please do not share this OTP with anyone.",
- "status": "ACTIVE",
- "email_header": null,
- "email_footer": null,
- "created_by": null,
- "updated_by": null,
- "tenant_code": "default",
- "organization_code": "default_code",
- "created_at": "2026-07-15T09:40:42.000Z",
- "updated_at": "2026-07-15T09:40:42.000Z",
- "deleted_at": null
}
], - "meta": {
- "formsVersion": [
- {
- "id": 1,
- "type": "formsrggjf",
- "version": 0
}
], - "correlation": "b269ca14-dcd6-4add-89b5-8bd6c669e0aa"
}
}Fetches a single notification template by its id.
Endpoint: /user/v1/notification/template/{id}.
Either the id path param or the code query param identifies the
template; when neither is present the list endpoint behaviour applies.
If no template matches for the caller's organization, the default
organization's template is returned as a fallback; if still none, a
400 "not found" is returned.
| id required | integer Notification template id. |
| type | string Enum: "sms" "email" "emailHeader" "emailFooter" Filter by template type. |
| X-auth-token required | string Access token required to use the API. Available in the login API response. |
{- "responseCode": "OK",
- "message": "Notification template fetched successfully",
- "result": [
- {
- "id": 1,
- "type": "email",
- "code": "generic_invite",
- "subject": "Welcome Aboard as a {roles}",
- "body": "<p>Dear {name},</p> We are delighted to inform you...",
- "status": "ACTIVE",
- "email_header": "email_header",
- "email_footer": "email_footer",
- "created_by": null,
- "updated_by": null,
- "tenant_code": "default",
- "organization_code": "default_code",
- "created_at": "2026-07-15T09:40:39.000Z",
- "updated_at": "2026-07-15T09:40:40.000Z",
- "deleted_at": null
}, - {
- "id": 22,
- "type": "sms",
- "code": "emailotp",
- "subject": null,
- "body": "Your {app_name} OTP to reset your password is {otp}. Please do not share this OTP with anyone.",
- "status": "ACTIVE",
- "email_header": null,
- "email_footer": null,
- "created_by": null,
- "updated_by": null,
- "tenant_code": "default",
- "organization_code": "default_code",
- "created_at": "2026-07-15T09:40:42.000Z",
- "updated_at": "2026-07-15T09:40:42.000Z",
- "deleted_at": null
}
], - "meta": {
- "formsVersion": [
- {
- "id": 1,
- "type": "formsrggjf",
- "version": 0
}
], - "correlation": "b269ca14-dcd6-4add-89b5-8bd6c669e0aa"
}
}Updates a notification template.
Endpoint: /user/v1/notification/template/{id}.
Caller must hold one of ADMIN, ORG_ADMIN or TENANT_ADMIN roles.
The template is located by the id path param; when id is absent the
code in the request body is used instead.
type, code, subject and body are mandatory and cannot be empty or null.
| id required | integer Notification template id. |
| X-auth-token required | string Access token required to use the API. Available in the login API response. |
| type required | string Enum: "sms" "email" "emailHeader" "emailFooter" Type of the notification template. |
| code required | string Unique code for the notification template (unique per organization + tenant). |
| subject required | string Subject of the email. |
| body required | string Body of the notification template. |
| email_header | string Email header content (code of an emailHeader template). |
| email_footer | string Email footer content (code of an emailFooter template). |
{- "type": "email",
- "code": "tl-email-invite",
- "subject": "Hi Welcome Back",
- "body": "<p>Dear User,</p> Welcome back to mentorEd",
- "email_header": "email_header",
- "email_footer": "email_footer"
}{- "responseCode": "OK",
- "message": "Notification template updated successfully",
- "result": [ ],
- "meta": {
- "formsVersion": [
- {
- "id": 1,
- "type": "formsrggjf",
- "version": 0
}
], - "correlation": "4e7107a0-90bb-41b0-8cad-1384165a1d6d"
}
}API associated with creating a new admin user.
/user/v1/admin/createsecret_code, name and password are always required.email or phone must be provided; phone_code is required when phone is present.| secret_code required | string Secret code for admin creation (must equal ADMIN_SECRET_CODE). |
| name required | string Name of the system user (letters and spaces only). |
| email required | string <email> Email of the system user. At least one of email or phone is required. |
| username | string Optional username (3-40 chars, or an email). Generated if omitted. |
| phone | string Phone number (7-15 digits). Requires phone_code when provided. |
| phone_code | string Country calling code, required when phone is provided. |
| password required | string <password> Password for the system user (must satisfy PASSWORD_POLICY_REGEX, no spaces). |
{- "secret_code": "secret_code",
- "name": "System Admin",
- "email": "systemuser@mail.com",
- "password": "StrongPass123!"
}{- "responseCode": "OK",
- "message": "ADMIN_USER_CREATED_SUCCESSFULLY",
- "result": {
- "user": {
- "id": 23,
- "email": "admin_3t7n860urv@admin.com",
- "email_verified": "false",
- "name": "System Admin",
- "username": "systemadmi_bcfdljttznux6u",
- "phone": null,
- "phone_code": null,
- "location": null,
- "about": null,
- "share_link": null,
- "status": "ACTIVE",
- "image": null,
- "has_accepted_terms_and_conditions": false,
- "languages": null,
- "preferred_language": "en",
- "custom_entity_text": null,
- "tenant_code": "default",
- "meta": null,
- "created_at": "2026-07-15T10:56:22.534Z",
- "updated_at": "2026-07-15T10:56:22.534Z",
- "deleted_at": null,
- "organizations": [
- {
- "id": 1,
- "name": "Default Organization",
- "code": "default_code",
- "description": "Updated via replay script",
- "status": "ACTIVE",
- "related_orgs": [
- 999999999
], - "tenant_code": "default",
- "meta": null,
- "created_by": null,
- "updated_by": 19,
- "roles": [
- {
- "id": 7,
- "title": "admin",
- "label": null,
- "user_type": 1,
- "status": "ACTIVE",
- "organization_id": 1,
- "visibility": "PUBLIC",
- "tenant_code": "default",
- "translations": null
}
]
}
]
}
}, - "meta": {
- "correlation": "6dc4029b-bc3a-4177-bfc7-0523cf84dff4"
}
}This API is associated with the login of the admin/system user.
/user/v1/admin/loginidentifier and password are required; phone_code is required only when the identifier is a phone number.| identifier required | string The admin's email, phone number, or username. |
| phone_code | string Country calling code. Required only when |
| password required | string <password> The admin's password. |
{- "identifier": "admin@example.com",
- "password": "StrongPass123!"
}{- "responseCode": "OK",
- "message": "User logged in successfully.",
- "result": {
- "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.<snip-verbatim-jwt>",
- "refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.<snip-verbatim-jwt>",
- "user": {
- "id": 23,
- "email": "aa4e5fde1ac3c5b79c307cca8648ddd8f4a8614a48238131082f48c14e2cafab",
- "email_verified": "false",
- "name": "System Admin",
- "username": "systemadmi_bcfdljttznux6u",
- "phone": null,
- "phone_code": null,
- "location": null,
- "about": null,
- "share_link": null,
- "status": "ACTIVE",
- "image": null,
- "has_accepted_terms_and_conditions": false,
- "languages": null,
- "preferred_language": "en",
- "custom_entity_text": null,
- "tenant_code": "default",
- "meta": null,
- "created_at": "2026-07-15T10:56:22.534Z",
- "updated_at": "2026-07-15T10:56:22.534Z",
- "deleted_at": null,
- "organizations": [
- {
- "id": 1,
- "name": "Default Organization",
- "code": "default_code",
- "description": "Updated via replay script",
- "status": "ACTIVE",
- "related_orgs": [
- 999999999
], - "tenant_code": "default",
- "meta": null,
- "created_by": null,
- "updated_by": 19,
- "roles": [
- {
- "id": 7,
- "title": "admin",
- "label": null,
- "user_type": 1,
- "status": "ACTIVE",
- "organization_id": 1,
- "visibility": "PUBLIC",
- "tenant_code": "default",
- "translations": null
}
]
}
], - "identifier": "admin_3t7n860urv@admin.com"
}
}, - "meta": {
- "correlation": "18becaeb-9bc1-4a86-b03c-30f0e7f0eefa"
}
}Delete a user.
/user/v1/admin/deleteUser/{id}id path parameter is required.| id required | string Example: 1 User ID to be deleted. Please append a valid user ID to the request URL. |
| X-auth-token required | string X-auth-token required for API access. Available in login API Response. |
{- "responseCode": "OK",
- "message": "User deleted successfully",
- "result": [ ],
- "meta": {
- "correlation": "0bc1c81b-c1b5-46cd-8fe9-adf19acc7600"
}
}Assigns a role to a user within an organization. Organization and tenant are derived from the auth token.
/user/v1/admin/assignRoleuser_id and role_id are required.| X-auth-token required | string X-auth-token required for API access. Available in login API Response. |
| user_id required | number Target user ID. Validator only enforces .isNumeric(), which also accepts non-integer numeric strings. |
| role_id required | number Role ID to assign. Validator only enforces .isNumeric(), which also accepts non-integer numeric strings. |
| organization_id | integer Optional organization ID (org is otherwise resolved from the token). |
{- "user_id": 22,
- "role_id": 1
}{- "responseCode": "OK",
- "message": "The role was assigned to the user successfully.",
- "result": {
- "mapping": {
- "created_at": "2026-07-15T10:56:22.821Z",
- "updated_at": "2026-07-15T10:56:22.821Z",
- "tenant_code": "default",
- "user_id": 22,
- "organization_code": "default_code",
- "role_id": 1,
- "deleted_at": null
}
}, - "meta": {
- "correlation": "85bc2566-ad38-43a5-92ca-62b13d5effdf"
}
}Assigns a user as an Org-Admin.
/user/v1/admin/addOrgAdminorganization_id is required; exactly one of identifier or user_id must be provided. phone_code is required when the identifier is a phone number.| X-auth-token required | string X-auth-token required for API access. Available in login API Response. |
| tenant-id required | string Tenant code header (required). |
| organization_id required | number The organization to which the user will be assigned as org admin. Validator only enforces .isNumeric(), which also accepts non-integer numeric strings. |
| identifier required | string The user's email, phone, or username (mutually exclusive with user_id). |
| user_id | number The user's ID (mutually exclusive with identifier). Validator only enforces .isNumeric(), which also accepts non-integer numeric strings. |
| phone_code | string Country calling code, required when identifier is a phone number. |
{- "organization_id": 55,
- "user_id": 12
}{- "responseCode": "OK",
- "message": "ORG_ADMIN_MAPPED_SUCCESSFULLY",
- "result": {
- "user_id": 0,
- "organization_id": 0,
- "user_roles": [
- { }
]
}, - "meta": {
- "correlation": "string"
}
}Deactivates an organization and all its users.
/user/v1/admin/deactivateOrg/{id}id path parameter is required (lowercase alphanumeric with underscores).| id required | string Example: default_code Organization code to deactivate (lowercase alphanumeric with underscores). |
| X-auth-token required | string X-auth-token required for API access. Available in login API Response. |
| tenant-id required | string Tenant code header (required). |
{- "responseCode": "OK",
- "message": "ORG_DEACTIVATED",
- "result": {
- "deactivated_users": 0
}, - "meta": {
- "correlation": "string"
}
}Deactivates one or more users.
/user/v1/admin/deactivateUserid or email (each a non-empty array) must be provided.| X-auth-token required | string X-auth-token required for API access. Available in login API Response. |
| id required | Array of integers Array of user IDs to deactivate. |
Array of strings Array of user emails to deactivate. |
{- "id": [
- 1,
- 3
]
}{- "responseCode": "OK",
- "message": "User deactivated Successfully",
- "result": [ ],
- "meta": {
- "correlation": "e1b296e6-b2a3-4ac4-869b-9227e2ba65c5",
- "formsVersion": [
- {
- "id": 1,
- "type": "formsrggjf",
- "version": 0
}
]
}
}Executes a raw read-only (SELECT) SQL query with pagination.
/user/v1/admin/executeRawQueryquery is required and must be a SELECT statement.| X-auth-token required | string X-auth-token required for API access. Available in login API Response. |
| query required | string Raw SELECT SQL query to execute. |
{- "query": "SELECT id, name FROM users LIMIT 10"
}{- "responseCode": "OK",
- "message": "QUERY_EXECUTED_SUCCESSFULLY",
- "result": {
- "data": [
- { }
], - "count": 0
}, - "meta": {
- "correlation": "string"
}
}This API is associated with cloud services for obtaining a signed URL.
/user/v1/cloud-services/file/getSignedUrlrequired must have valid values.fileName is the only required query parameter. Optional query parameters dynamicPath (overrides the default users/{id}-{timestamp}- prefix) and public (true targets the public asset bucket) are also accepted.| fileName required | string Example: fileName=image.jpg Name of the file to be uploaded. Must not be empty. |
| dynamicPath | string Example: dynamicPath=profile-images Optional. When provided, overrides the default destination path ( |
| public | string Enum: "true" "false" Example: public=false Optional. When set to the literal string |
| X-auth-token required | string To make use of the API, you require X-auth-token. This is Available in login API Response. |
{- "responseCode": "OK",
- "message": "Signed Url Generated Successfully.",
- "result": {
- "filePath": "users/22-1784112986633-replay-test.csv",
- "destFilePath": "users/22-1784112986633-replay-test.csv"
}, - "meta": {
- "formsVersion": [
- {
- "id": 1,
- "type": "formsrggjf",
- "version": 0
}, - {
- "id": 2,
- "type": "formsrggjf",
- "version": 0
}, - {
- "id": 3,
- "type": "formcsfgof",
- "version": 0
}, - {
- "id": 4,
- "type": "formcsfgof",
- "version": 0
}, - {
- "id": 5,
- "type": "formsrggjf",
- "version": 0
}, - {
- "id": 6,
- "type": "formhvedht",
- "version": 0
}, - {
- "id": 7,
- "type": "formsrggjf",
- "version": 0
}, - {
- "id": 8,
- "type": "formcsfgof",
- "version": 0
}, - {
- "id": 9,
- "type": "formhvedht",
- "version": 0
}
], - "correlation": "2d1dc83e-8c81-41fa-8fc9-cdb86b167b62"
}
}This API is associated with cloud services for obtaining a downloadable URL.
/user/v1/cloud-services/file/getDownloadableUrlrequired must have valid values.filePath is supplied as a query parameter. The optional public query parameter (true) targets the public asset bucket.| filePath required | string Example: filePath=users/62832531a05cbd57b273aebb-1654149589875-image.jpg Path of the file to be downloaded. |
| public | string Enum: "true" "false" Example: public=false Optional. When set to the literal string |
| X-auth-token required | string To make use of the API, you require X-auth-token. This is Available in login API Response. |
{- "responseCode": "OK",
- "message": "Download Url Generated Successfully.",
- "meta": {
- "formsVersion": [
- {
- "id": 1,
- "type": "formsrggjf",
- "version": 0
}, - {
- "id": 2,
- "type": "formsrggjf",
- "version": 0
}, - {
- "id": 3,
- "type": "formcsfgof",
- "version": 0
}, - {
- "id": 4,
- "type": "formcsfgof",
- "version": 0
}, - {
- "id": 5,
- "type": "formsrggjf",
- "version": 0
}, - {
- "id": 6,
- "type": "formhvedht",
- "version": 0
}, - {
- "id": 7,
- "type": "formsrggjf",
- "version": 0
}, - {
- "id": 8,
- "type": "formcsfgof",
- "version": 0
}, - {
- "id": 9,
- "type": "formhvedht",
- "version": 0
}
], - "correlation": "c03cfc90-238a-401a-98b3-39d36ae80499"
}
}This API is associated with cloud services for obtaining a sample CSV file for bulk user create.
/user/v1/cloud-services/file/getSampleCSVrequired must have valid values.| X-auth-token required | string To make use of the API, you require X-auth-token. This is Available in login API Response. |
{- "responseCode": "OK",
- "message": "Download Url Generated Successfully.",
- "meta": {
- "formsVersion": [
- {
- "id": 1,
- "type": "formsrggjf",
- "version": 0
}, - {
- "id": 2,
- "type": "formsrggjf",
- "version": 0
}, - {
- "id": 3,
- "type": "formcsfgof",
- "version": 0
}, - {
- "id": 4,
- "type": "formcsfgof",
- "version": 0
}, - {
- "id": 5,
- "type": "formsrggjf",
- "version": 0
}, - {
- "id": 6,
- "type": "formhvedht",
- "version": 0
}, - {
- "id": 7,
- "type": "formsrggjf",
- "version": 0
}, - {
- "id": 8,
- "type": "formcsfgof",
- "version": 0
}, - {
- "id": 9,
- "type": "formhvedht",
- "version": 0
}
], - "correlation": "87b3b7e2-d27c-4504-b31f-110e90aef24d"
}
}Retrieve the list of user roles.
/user/v1/user-role/listrequired.| page | integer Page number. |
| limit | integer Number of records to limit. |
| search | string Search text matched against 'title' (case-insensitive, substring). |
| language | string Optional. When provided and not 'en', role labels are localized via translations; when omitted or 'en', the translations field is stripped from each result row. |
| title | string^[a-z_]+$ Optional filter. Must match ^[a-z_]+$. |
| user_type | string Enum: "0" "1" Optional filter. '0' (non-admin) or '1' (admin). |
| visibility | string Value: "PUBLIC" Optional filter. Only 'PUBLIC' is accepted. |
| status | string Enum: "ACTIVE" "INACTIVE" Optional filter. ACTIVE or INACTIVE. |
| organization_id | string^[0-9]+$ Optional filter. Must be numeric. |
| X-auth-token required | string X-auth-token obtained from the login API response. |
{- "responseCode": "OK",
- "message": "Roles fetched successfully.",
- "result": {
- "data": [
- {
- "id": 1,
- "title": "session_manager",
- "user_type": 0,
- "visibility": "PUBLIC",
- "label": "Session Manager",
- "status": "ACTIVE",
- "organization_id": 1,
- "tenant_code": "default"
}, - {
- "id": 8,
- "title": "org_admin",
- "user_type": 1,
- "visibility": "PUBLIC",
- "label": null,
- "status": "ACTIVE",
- "organization_id": 1,
- "tenant_code": "default"
}
], - "count": 10
}, - "meta": {
- "formsVersion": [
- {
- "id": 1,
- "type": "formsrggjf",
- "version": 0
}, - {
- "id": 3,
- "type": "formcsfgof",
- "version": 0
}
], - "correlation": "42ca997d-9219-4cf8-93ef-b7e55cb8f7b4"
}
}Create a role.
/user/v1/user-role/create.required.| X-auth-token required | string Access token of the user. |
| title required | string^[a-z_]+$ Lowercase letters and underscores only. |
| user_type required | string Enum: "0" "1" '0' = non-admin, '1' = admin. Must be sent as a string; the API stores/returns it as a number. |
| visibility required | string Value: "PUBLIC" |
| label required | string <= 50 characters ^[A-Z][a-zA-Z\s]*$ Must start with an uppercase letter; letters and spaces only; max 50 characters. |
| status | string Enum: "ACTIVE" "INACTIVE" Optional. Must be one of ACTIVE or INACTIVE. |
| translations | object or null Optional. Free-form translations object. |
{- "title": "head_master",
- "user_type": "1",
- "visibility": "PUBLIC",
- "label": "Head Master"
}{- "responseCode": "OK",
- "message": "Role created successfully.",
- "result": {
- "id": 30,
- "title": "role_cfmnwn",
- "user_type": 0,
- "status": "ACTIVE",
- "visibility": "PUBLIC",
- "organization_id": 1,
- "tenant_code": "default",
- "translations": null
}, - "meta": {
- "formsVersion": [
- {
- "id": 1,
- "type": "formsrggjf",
- "version": 0
}
], - "correlation": "78d9dec1-7752-4b82-8cb5-320fbebc3f71"
}
}Update a role by id.
/user/v1/user-role/update/{id}required.| id required | integer Example: 1 Role id to update. |
| X-auth-token required | string Access token obtained from the login API response. |
| title required | string^[a-z_]+$ |
| user_type required | string Enum: "0" "1" |
| visibility required | string Value: "PUBLIC" |
| status | string Enum: "ACTIVE" "INACTIVE" |
| label | string <= 50 characters ^[A-Z][a-zA-Z\s]*$ |
| translations | object or null Optional. Free-form translations object. |
{- "title": "head_master",
- "user_type": "1",
- "visibility": "PUBLIC",
- "label": "Head Master",
- "status": "ACTIVE"
}{- "responseCode": "string",
- "message": "string",
- "result": {
- "title": "string",
- "user_type": 0,
- "status": "string",
- "visibility": "string",
- "organization_id": 0,
- "translations": { }
}, - "meta": {
- "formsVersion": [
- { }
], - "correlation": "string"
}
}Delete a role by id.
/user/v1/user-role/delete/{id}.required.| id required | integer Example: 31 Role id to delete. |
| X-auth-token required | string X-auth-token obtained from the login API response. |
{- "responseCode": "string",
- "message": "string",
- "result": { },
- "meta": {
- "formsVersion": [
- { }
], - "correlation": "string"
}
}Create permissions for users.
/user/v1/permissions/create.required.| X-auth-token required | string Access token of the admin. |
| code required | string Unique permission code. Must not contain spaces (matches |
| module required | string Module name. Must not contain spaces (matches |
| request_type required | string Enum: "GET" "POST" "PATCH" "PUT" "DELETE" HTTP request type this permission covers. Must be one of: GET, POST, PATCH, PUT, DELETE. Note: the request accepts a single string, but the create/update responses echo it back inside an array ( |
| api_path required | string API path this permission applies to. Must match |
| status | string Optional permission status. Must not contain spaces (matches |
{- "code": "read_modules_list",
- "module": "modules",
- "request_type": "GET",
- "api_path": "/mentoring/v1/modules/list",
- "status": "ACTIVE"
}{- "responseCode": "OK",
- "message": "PERMISSION_CREATED_SUCCESSFULLY",
- "result": {
- "Id": 1,
- "status": "<string>",
- "module": "<string>",
- "request_type": [
- "<string>"
]
}, - "meta": {
- "correlation": "<string>"
}
}Update permissions for users.
/user/v1/permissions/update.required.| id required | integer Permission id. |
| X-auth-token required | string Access token of the admin. |
| code required | string Unique permission code. Must not contain spaces (matches |
| module required | string Module name. Must not contain spaces (matches |
| request_type required | string Enum: "GET" "POST" "PATCH" "PUT" "DELETE" Must be one of: GET, POST, PATCH, PUT, DELETE. |
| api_path required | string API path this permission applies to. Must match |
| status | string Optional permission status. Must not contain spaces (matches |
{- "code": "read_modules_list",
- "module": "modules",
- "request_type": "GET",
- "api_path": "/mentoring/v1/modules/list",
- "status": "ACTIVE"
}{- "responseCode": "OK",
- "message": "PERMISSION_UPDATED_SUCCESSFULLY",
- "result": {
- "Id": 1,
- "status": "<string>",
- "module": "<string>",
- "request_type": [
- "<string>"
]
}, - "meta": {
- "correlation": "<string>"
}
}Get a list of permissions.
/user/v1/permissions/list.required.| page | integer Page number for pagination. |
| limit | integer Number of items per page. |
| search | string search on code |
| X-auth-token required | string Access token of the admin. |
{- "responseCode": "OK",
- "message": "PERMISSION_FETCHED_SUCCESSFULLY",
- "result": {
- "results": {
- "data": [
- {
- "id": 1,
- "code": "<string>",
- "module": "<string>",
- "request_type": [
- "<string>"
], - "api_path": "<string>",
- "status": "<string>"
}
], - "count": 1
}
}, - "meta": {
- "correlation": "<string>"
}
}Delete permissions for users.
/user/v1/permissions/delete.required.| id required | integer Permission id. |
| X-auth-token required | string Access token of the admin. |
{- "responseCode": "OK",
- "message": "PERMISSION_DELETED_SUCCESSFULLY",
- "result": { },
- "meta": {
- "correlation": "<string>"
}
}Create modules for users.
/user/v1/modules/create.required.| X-auth-token required | string Access token of the admin. |
| code required | string Unique module code. Must not contain spaces (matches |
| status | string Optional module status. Must not contain spaces (matches |
{- "code": "systemadmin"
}{- "responseCode": "OK",
- "message": "MODULES_CREATED_SUCCESSFULLY",
- "result": {
- "Id": 1,
- "code": "<string>",
- "status": "<string>"
}, - "meta": {
- "correlation": "<string>"
}
}Update an existing module.
/user/v1/modules/update.required.| id required | integer Module id. |
| X-auth-token required | string Access token of the admin. |
| code required | string Unique module code. Must not contain spaces (matches |
| status | string Optional module status. Must not contain spaces (matches |
{- "code": "allsessionss"
}{- "responseCode": "OK",
- "message": "MODULES_UPDATED_SUCCESSFULLY",
- "result": {
- "id": 1,
- "status": "<string>",
- "code": "<string>"
}, - "meta": {
- "correlation": "<string>"
}
}Get a list of modules.
/user/v1/modules/list.required.| page | integer Page number for pagination. |
| limit | integer Number of items per page. |
| search | string search on code |
| X-auth-token required | string Access token of the admin. |
{- "responseCode": "OK",
- "message": "MODULES_FETCHED_SUCCESSFULLY",
- "result": {
- "data": [
- {
- "id": 1,
- "code": "<string>",
- "status": "<string>"
}
], - "count": 1
}, - "meta": {
- "correlation": "<string>"
}
}Delete an existing module.
/user/v1/modules/delete.required.| id required | integer Module id. |
| X-auth-token required | string Access token of the admin. |
{- "responseCode": "OK",
- "message": "MODULES_DELETED_SUCCESSFULLY",
- "result": { },
- "meta": {
- "correlation": "<string>"
}
}Create a rolePermissionMapping for a user role.
/user/v1/role-permission-mapping/create.required.| X-auth-token required | string Access token of the admin. |
| permission_id required | string Permission id. Must not be empty and must contain only digits (matches |
| role_title required | string Role title. Must not be empty and must contain only lowercase letters/underscores (matches |
{- "permission_id": "1",
- "role_title": "mentor"
}{- "responseCode": "OK",
- "message": "ROLE_PERMISSION_CREATED_SUCCESSFULLY",
- "result": {
- "role_title": "<string>",
- "permission_id": 1,
- "module": "<string>",
- "request_type": [
- "<string>"
]
}, - "meta": {
- "correlation": "<string>"
}
}Delete a rolePermissionMapping for a user role.
/user/v1/role-permission-mapping/delete.required.| X-auth-token required | string Access token of the admin. |
| permission_id required | string Permission id. Must not be empty and must contain only digits (matches |
| role_title required | string Role title. Must not be empty and must contain only lowercase letters/underscores (matches |
{- "permission_id": "1",
- "role_title": "mentor"
}{- "responseCode": "OK",
- "message": "ROLE_PERMISSION_DELETED_SUCCESSFULLY",
- "result": { },
- "meta": {
- "correlation": "<string>"
}
}Get the list of permissions (grouped by module) granted to the caller's roles.
/user/v1/role-permission-mapping/list.
This endpoint takes no request body and no query parameters: controllers/v1/role-permission-mapping.js list derives the role titles to look up entirely from req.decodedToken.roles (set by the auth middleware from the caller's token), and services/role-permission-mapping.js list() takes no other input.| X-auth-token required | string Access token of the caller; the roles encoded in this token determine which permissions are returned. |
{- "responseCode": "OK",
- "message": "FETCHED_ROLE_PERMISSION_SUCCESSFULLY",
- "result": {
- "permissions": [
- {
- "module": "<string>",
- "request_type": [
- "<string>"
], - "service": "<string>"
}
]
}, - "meta": {
- "correlation": "<string>"
}
}This API is used to verify the health status of the user Service and its dependencies (Kafka, Redis, and downstream microservices such as EntityManagementService and SchedulerService).
| basicCheck | boolean When set to a truthy value, skips the downstream microservice checks (EntityManagementService, SchedulerService) and only reports on directly-configured dependencies (Kafka, Redis). Read from req.query.basicCheck in health-checks/health-check.js. |
| serviceName | string Name of the calling service. Used only to avoid a self-check loop -- if a configured microservice's name matches this value, that microservice's check is skipped. Read from req.query.serviceName in health-checks/health-check.js. |
{- "id": "service.health.api",
- "version": "3.3.24",
- "ts": "2025-07-18T06:26:10.726Z",
- "params": {
- "resmsgid": "189bdb70-63a0-11f0-b86a-3b7c197fc982",
- "msgid": "189bdb71-63a0-11f0-b86a-3b7c197fc982",
- "status": "successful",
- "err": null,
- "errMsg": null
}, - "status": 200,
- "result": {
- "name": "UserService",
- "healthy": true,
- "checks": [
- {
- "name": "Kafka",
- "healthy": true,
- "err": "",
- "errMsg": ""
}, - {
- "name": "redis",
- "healthy": true,
- "err": "",
- "errMsg": ""
}, - {
- "name": "EntityManagementService",
- "healthy": true,
- "err": "",
- "errMsg": ""
}, - {
- "name": "SchedulerService",
- "healthy": true,
- "err": "",
- "errMsg": ""
}
]
}
}This API accepts terms and conditions for the authenticated user.
/user/v1/account/acceptTermsAndCondition| X-auth-token required | string X-auth-token from the login API response. |
{- "responseCode": "OK",
- "message": "User successfully updated.",
- "result": [ ],
- "meta": {
- "formsVersion": [
- {
- "id": 1,
- "type": "formsrggjf",
- "version": 0
}, - {
- "id": 2,
- "type": "formsrggjf",
- "version": 0
}, - {
- "id": 3,
- "type": "formcsfgof",
- "version": 0
}, - {
- "id": 4,
- "type": "formcsfgof",
- "version": 0
}, - {
- "id": 5,
- "type": "formsrggjf",
- "version": 0
}
], - "correlation": "4785f7d3-7b61-437e-a84f-75aca1f246c8"
}
}This API checks whether a username is already taken within the tenant resolved from the caller's request domain.
/user/v1/public/checkUsernameusername is a required, non-empty query parameter (trimmed).| username required | string Example: username=nevil_ngrcbhcfke-k1x Username to check for availability. Must not be empty after trimming. |
{- "responseCode": "OK",
- "message": "Username is available",
- "result": {
- "available": true
}, - "meta": {
- "formsVersion": [
- {
- "id": 1,
- "type": "profile",
- "version": 3
}
], - "correlation": "abe8b9d7-de25-423d-8f30-3278b39c4355"
}
}This API resolves and returns tenant branding/details, and optionally organization details.
/user/v1/public/brandingorg_code is an optional query parameter; when supplied, organization
details are additionally resolved.X-Tenant-Code header if present,
otherwise from the caller's request domain.| org_code | string Example: org_code=org_sample_code Organization code to additionally resolve organization branding details for. |
{- "responseCode": "OK",
- "message": "TENANT_DETAILS",
- "result": {
- "code": "sample_tenant",
- "name": "Sample Tenant",
- "status": "ACTIVE",
- "description": "Sample tenant description",
- "theming": { },
- "configuration": { },
- "meta": { }
}, - "meta": {
- "correlation": "3f9c1a2b-6d4e-4b8a-9f3c-1a2b6d4e4b8a"
}
}This API resolves an org-invite's prefilled user profile data.
/user/v1/public/userInvitesinvitation_key is a required query parameter.tenant_code is a required request body field.| invitation_key required | string Example: invitation_key=3f9c1a2b6d4e4b8a9f3c1a2b6d4e4b8a Invitation key identifying the pending invite. |
| tenant_code required | string Tenant code the invitation belongs to. |
{- "tenant_code": "default_tenant"
}{- "responseCode": "OK",
- "message": "USER_DATA_FETCHED",
- "result": {
- "email": "invitee@example.com",
- "email_verified": false,
- "name": "Sample Invitee",
- "username": "sample_invitee",
- "phone": null,
- "phone_code": null,
- "location": null,
- "about": null,
- "share_link": null,
- "status": "ACTIVE",
- "image": null,
- "has_accepted_terms_and_conditions": false,
- "languages": [ ],
- "preferred_language": null,
- "custom_entity_text": { },
- "tenant_code": "default_tenant",
- "meta": { },
- "created_at": "2026-01-01T00:00:00.000Z",
- "updated_at": "2026-01-01T00:00:00.000Z",
- "deleted_at": null,
- "editable_fields": [
- "name",
- "about"
]
}, - "meta": {
- "correlation": "7b2e4f1a-8c3d-4e5f-9a1b-2c3d4e5f9a1b"
}
}