Skip to content

Hive Core Gateway Engine

Version 1.0.0

Path Table

Method Path Description
POST /api/v1/auth/login Login Access Token
GET /api/v1/hive/tickets Get All Tickets
POST /api/v1/hive/tickets Create Ticket
PUT /api/v1/hive/tickets/{ticket_id}/status Update Ticket Status
POST /api/v1/hive/tickets/{ticket_id}/replies Add Ticket Reply
GET /api/v1/management/users Get All Managed Users
PUT /api/v1/management/users/{user_id} Update Managed User Profile
POST /api/v1/management/users/me/change-password Change Personal Password
GET /api/v1/management/roles Get All Available System Roles
POST /api/v1/management/roles Create New System Role
PUT /api/v1/management/roles/{role_id} Update Existing System Role Matrix
GET /api/v1/management/audit-logs Get System Activity Trail
GET /api/v1/management/teams Get All Workspace Teams
POST /api/v1/management/teams Provision New Corporate Team
PUT /api/v1/management/teams/{team_id} Update Existing Corporate Team
DELETE /api/v1/management/teams/{team_id} Purge Corporate Team Workspace
POST /api/v1/management/teams/{team_id}/members Add User To Team Boundary
DELETE /api/v1/management/teams/{team_id}/members/{user_id} Remove User From Team Boundary
POST /api/v1/crm/clients Create Crm Client
GET /api/v1/crm/clients Get All Crm Clients
PUT /api/v1/crm/clients/{client_id} Update Crm Client
DELETE /api/v1/crm/clients/{client_id} Delete Crm Client
GET /api/v1/crm/contacts Get All Crm Contacts
POST /api/v1/crm/contacts Create Crm Contact
PUT /api/v1/crm/contacts/{contact_id} Update Crm Contact
DELETE /api/v1/crm/contacts/{contact_id} Delete Crm Contact
PATCH /api/v1/crm/contacts/{contact_id}/set-primary Set Primary Crm Contact
PATCH /api/v1/crm/contacts/{contact_id}/unset-primary Unset Primary Crm Contact
PATCH /api/v1/crm/contacts/{contact_id}/unlink Unlink Contact From Client
GET /api/v1/crm/categories Get All Client Categories
POST /api/v1/crm/categories Create Client Category
PUT /api/v1/crm/categories/{cat_id} Update Client Category
DELETE /api/v1/crm/categories/{cat_id} Delete Client Category
GET /api/v1/crm/clients/{client_id}/credentials Get Client Credentials
POST /api/v1/crm/clients/{client_id}/credentials Add Client Credential
PUT /api/v1/crm/clients/{client_id}/credentials/{cred_id} Update Client Credential
DELETE /api/v1/crm/clients/{client_id}/credentials/{cred_id} Delete Client Credential
PUT /api/v1/crm/transfer/client/{client_id} Transfer Client Records
GET /api/v1/notifications Get User Notifications
POST /api/v1/notifications/{notification_id}/read Mark Notification As Seen
POST /api/v1/notifications/read-all Mark All Notifications As Seen
POST /api/v1/notifications/broadcast Admin Broadcast Notification
GET /api/v1/message-hub/messages/{message_id}/fetch-body Fetch Message Body On Demand
POST /api/v1/message-hub/messages/{message_id}/fetch-body Fetch Lazy Loaded Body
POST /api/v1/message-hub/channels/{channel_id}/sync Trigger Manual Channel Sync
POST /api/v1/message-hub/channels Create Communication Channel
GET /api/v1/message-hub/channels List User Channels
POST /api/v1/message-hub/channels/{channel_id}/test-connection Test Channel Connection
GET /api/v1/message-hub/threads List Threads
GET /api/v1/message-hub/threads/{thread_id} Get Thread Detail
GET /api/v1/message-hub/contacts/{contact_id}/threads Get Threads For Contact
POST /api/v1/message-hub/threads/{thread_id}/reply Send Thread Reply
POST /api/v1/message-hub/threads/{thread_id}/locks Heartbeat Presence Lock
POST /api/v1/message-hub/test-imap-poll Trigger Manual Imap Poll
GET /v1/health System Heartbeat Check
GET /api/v1/trigger-log-test Trigger Log Test

Reference Table

Name Path Description
ActionEnum #/components/schemas/ActionEnum
ActivityLogResponseSchema #/components/schemas/ActivityLogResponseSchema
AddMemberPayloadSchema #/components/schemas/AddMemberPayloadSchema
AuditOperatorSchema #/components/schemas/AuditOperatorSchema
Body_login_access_token_api_v1_auth_login_post #/components/schemas/Body_login_access_token_api_v1_auth_login_post
BroadcastPayloadSchema #/components/schemas/BroadcastPayloadSchema
CRMClientCategoryCreate #/components/schemas/CRMClientCategoryCreate
CRMClientCategoryResponse #/components/schemas/CRMClientCategoryResponse
CRMClientCreate #/components/schemas/CRMClientCreate
CRMClientCredentialCreate #/components/schemas/CRMClientCredentialCreate
CRMClientCredentialResponse #/components/schemas/CRMClientCredentialResponse
CRMClientEnvelopeResponse #/components/schemas/CRMClientEnvelopeResponse
CRMClientResponse #/components/schemas/CRMClientResponse
CRMContactCreate #/components/schemas/CRMContactCreate
CRMContactEnvelopeResponse #/components/schemas/CRMContactEnvelopeResponse
CRMContactResponse #/components/schemas/CRMContactResponse
CRMOwnerSummaryResponse #/components/schemas/CRMOwnerSummaryResponse
ChannelCreateSchema #/components/schemas/ChannelCreateSchema
CredentialSchema #/components/schemas/CredentialSchema
DocTypeEnum #/components/schemas/DocTypeEnum
HTTPValidationError #/components/schemas/HTTPValidationError
MessageReplySchema #/components/schemas/MessageReplySchema
MessageSummarySchema #/components/schemas/MessageSummarySchema
PermissionSchema #/components/schemas/PermissionSchema
RoleCreate #/components/schemas/RoleCreate
RoleResponse #/components/schemas/RoleResponse
TeamCreateSchema #/components/schemas/TeamCreateSchema
TeamMemberSchema #/components/schemas/TeamMemberSchema
TeamResponseSchema #/components/schemas/TeamResponseSchema
ThreadLockCreate #/components/schemas/ThreadLockCreate
ThreadLockResponse #/components/schemas/ThreadLockResponse
ThreadReplyCreateSchema #/components/schemas/ThreadReplyCreateSchema
ThreadResponseSchema #/components/schemas/ThreadResponseSchema
TicketCreate #/components/schemas/TicketCreate
TicketPriority #/components/schemas/TicketPriority
TicketReplyCreate #/components/schemas/TicketReplyCreate
TicketResponse #/components/schemas/TicketResponse
TicketStatus #/components/schemas/TicketStatus
TicketStatusUpdate #/components/schemas/TicketStatusUpdate
TransferClientSchema #/components/schemas/TransferClientSchema
UserDetailedResponse #/components/schemas/UserDetailedResponse
UserManagementUpdate #/components/schemas/UserManagementUpdate
UserPasswordChangeSchema #/components/schemas/UserPasswordChangeSchema
UserTeamSummarySchema #/components/schemas/UserTeamSummarySchema
ValidationError #/components/schemas/ValidationError
OAuth2PasswordBearer #/components/securitySchemes/OAuth2PasswordBearer

Path Details


[POST]/api/v1/auth/login

  • Summary
    Login Access Token

  • Operation id
    login_access_token_api_v1_auth_login_post

  • Description
    Authenticates account nodes, aggregates inherited permission matrices, and issues active JWT token assets.

RequestBody

  • application/x-www-form-urlencoded
{
  grant_type?: Partial(string) & Partial(null)
  username: string
  password: string
  scope?: string
  client_id?: Partial(string) & Partial(null)
  client_secret?: Partial(string) & Partial(null)
}

Responses

  • 200 Successful Response

application/json


  • 422 Validation Error

application/json

{
  detail: {
    loc?: Partial(string) & Partial(integer)[]
    msg: string
    type: string
    ctx: {
    }
  }[]
}

[GET]/api/v1/hive/tickets

  • Summary
    Get All Tickets

  • Operation id
    get_all_tickets_api_v1_hive_tickets_get

  • Security
    OAuth2PasswordBearer

Responses

  • 200 Successful Response

application/json

{
  id: integer
  subject: string
  description: string
  priority: string
  status: string
  creation: string
  raised_by_id: integer
}[]

[POST]/api/v1/hive/tickets

  • Summary
    Create Ticket

  • Operation id
    create_ticket_api_v1_hive_tickets_post

  • Security
    OAuth2PasswordBearer

RequestBody

  • application/json
{
  subject: string
  description: string
  priority?: enum[Low, Medium, High]
  raised_by_id: integer
}

Responses

  • 201 Successful Response

application/json

{
  id: integer
  subject: string
  description: string
  priority: string
  status: string
  creation: string
  raised_by_id: integer
}
  • 422 Validation Error

application/json

{
  detail: {
    loc?: Partial(string) & Partial(integer)[]
    msg: string
    type: string
    ctx: {
    }
  }[]
}

[PUT]/api/v1/hive/tickets/{ticket_id}/status

  • Summary
    Update Ticket Status

  • Operation id
    update_ticket_status_api_v1_hive_tickets__ticket_id__status_put

  • Security
    OAuth2PasswordBearer

RequestBody

  • application/json
{
  status: enum[Open, Replied, Closed]
}

Responses

  • 200 Successful Response

application/json

{
  id: integer
  subject: string
  description: string
  priority: string
  status: string
  creation: string
  raised_by_id: integer
}
  • 422 Validation Error

application/json

{
  detail: {
    loc?: Partial(string) & Partial(integer)[]
    msg: string
    type: string
    ctx: {
    }
  }[]
}

[POST]/api/v1/hive/tickets/{ticket_id}/replies

  • Summary
    Add Ticket Reply

  • Operation id
    add_ticket_reply_api_v1_hive_tickets__ticket_id__replies_post

  • Description
    Adds a reply node to an existing ticket while validating row-level permissions.

  • Security
    OAuth2PasswordBearer

Parameters(Query)

author_id: integer

RequestBody

  • application/json
{
  message: string
}

Responses

  • 201 Successful Response

application/json


  • 422 Validation Error

application/json

{
  detail: {
    loc?: Partial(string) & Partial(integer)[]
    msg: string
    type: string
    ctx: {
    }
  }[]
}

[GET]/api/v1/management/users

  • Summary
    Get All Managed Users

  • Operation id
    get_all_managed_users_api_v1_management_users_get

  • Security
    OAuth2PasswordBearer

Responses

  • 200 Successful Response

application/json

{
  id: integer
  email: string
  name: string
  roles: {
    id: integer
    name: string
    description?: Partial(string) & Partial(null)
    permissions: {
      id?: Partial(integer) & Partial(null)
      role_id?: Partial(integer) & Partial(null)
      doctype: enum[USER, TICKET, ROLE, CLIENT, CONTACT, CLIENT_CATEGORY, ADMIN, NOTIFICATION, EXTERNAL_MESSAGE]
      action: enum[CREATE, READ, WRITE, DELETE]
      access_level: string
    }[]
  }[]
  is_active: boolean
  credentials: {
    target_service: string
    api_key?: Partial(string) & Partial(null)
    api_secret?: Partial(string) & Partial(null)
    additional_meta?: Partial(string) & Partial(null)
  }[]
  teams: {
    id: integer
    name: string
  }[]
}[]

[PUT]/api/v1/management/users/{user_id}

  • Summary
    Update Managed User Profile

  • Operation id
    update_managed_user_profile_api_v1_management_users__user_id__put

  • Security
    OAuth2PasswordBearer

RequestBody

  • application/json
{
  email?: Partial(string) & Partial(null)
  name?: Partial(string) & Partial(null)
  role_ids?: Partial(integer[]) & Partial(null)
  is_active?: Partial(boolean) & Partial(null)
  password?: Partial(string) & Partial(null)
  team_ids?: Partial(integer[]) & Partial(null)
  credentials?: Partial({
     target_service: string
     api_key?: Partial(string) & Partial(null)
     api_secret?: Partial(string) & Partial(null)
     additional_meta?: Partial(string) & Partial(null)
   }[]) & Partial(null)
}

Responses

  • 200 Successful Response

application/json

{
  id: integer
  email: string
  name: string
  roles: {
    id: integer
    name: string
    description?: Partial(string) & Partial(null)
    permissions: {
      id?: Partial(integer) & Partial(null)
      role_id?: Partial(integer) & Partial(null)
      doctype: enum[USER, TICKET, ROLE, CLIENT, CONTACT, CLIENT_CATEGORY, ADMIN, NOTIFICATION, EXTERNAL_MESSAGE]
      action: enum[CREATE, READ, WRITE, DELETE]
      access_level: string
    }[]
  }[]
  is_active: boolean
  credentials: {
    target_service: string
    api_key?: Partial(string) & Partial(null)
    api_secret?: Partial(string) & Partial(null)
    additional_meta?: Partial(string) & Partial(null)
  }[]
  teams: {
    id: integer
    name: string
  }[]
}
  • 422 Validation Error

application/json

{
  detail: {
    loc?: Partial(string) & Partial(integer)[]
    msg: string
    type: string
    ctx: {
    }
  }[]
}

[POST]/api/v1/management/users/me/change-password

  • Summary
    Change Personal Password

  • Operation id
    change_personal_password_api_v1_management_users_me_change_password_post

  • Security
    OAuth2PasswordBearer

RequestBody

  • application/json
{
  current_password: string
  new_password: string
}

Responses

  • 200 Successful Response

application/json


  • 422 Validation Error

application/json

{
  detail: {
    loc?: Partial(string) & Partial(integer)[]
    msg: string
    type: string
    ctx: {
    }
  }[]
}

[GET]/api/v1/management/roles

  • Summary
    Get All Available System Roles

  • Operation id
    get_all_available_system_roles_api_v1_management_roles_get

  • Security
    OAuth2PasswordBearer

Responses

  • 200 Successful Response

application/json

{
  id: integer
  name: string
  description?: Partial(string) & Partial(null)
  permissions: {
    id?: Partial(integer) & Partial(null)
    role_id?: Partial(integer) & Partial(null)
    doctype: enum[USER, TICKET, ROLE, CLIENT, CONTACT, CLIENT_CATEGORY, ADMIN, NOTIFICATION, EXTERNAL_MESSAGE]
    action: enum[CREATE, READ, WRITE, DELETE]
    access_level: string
  }[]
}[]

[POST]/api/v1/management/roles

  • Summary
    Create New System Role

  • Operation id
    create_new_system_role_api_v1_management_roles_post

  • Security
    OAuth2PasswordBearer

RequestBody

  • application/json
{
  name: string
  description?: Partial(string) & Partial(null)
  permissions: {
  }[]
}

Responses

  • 201 Successful Response

application/json

{
  id: integer
  name: string
  description?: Partial(string) & Partial(null)
  permissions: {
    id?: Partial(integer) & Partial(null)
    role_id?: Partial(integer) & Partial(null)
    doctype: enum[USER, TICKET, ROLE, CLIENT, CONTACT, CLIENT_CATEGORY, ADMIN, NOTIFICATION, EXTERNAL_MESSAGE]
    action: enum[CREATE, READ, WRITE, DELETE]
    access_level: string
  }[]
}
  • 422 Validation Error

application/json

{
  detail: {
    loc?: Partial(string) & Partial(integer)[]
    msg: string
    type: string
    ctx: {
    }
  }[]
}

[PUT]/api/v1/management/roles/{role_id}

  • Summary
    Update Existing System Role Matrix

  • Operation id
    update_existing_system_role_matrix_api_v1_management_roles__role_id__put

  • Security
    OAuth2PasswordBearer

RequestBody

  • application/json
{
  name: string
  description?: Partial(string) & Partial(null)
  permissions: {
  }[]
}

Responses

  • 200 Successful Response

application/json

{
  id: integer
  name: string
  description?: Partial(string) & Partial(null)
  permissions: {
    id?: Partial(integer) & Partial(null)
    role_id?: Partial(integer) & Partial(null)
    doctype: enum[USER, TICKET, ROLE, CLIENT, CONTACT, CLIENT_CATEGORY, ADMIN, NOTIFICATION, EXTERNAL_MESSAGE]
    action: enum[CREATE, READ, WRITE, DELETE]
    access_level: string
  }[]
}
  • 422 Validation Error

application/json

{
  detail: {
    loc?: Partial(string) & Partial(integer)[]
    msg: string
    type: string
    ctx: {
    }
  }[]
}

[GET]/api/v1/management/audit-logs

  • Summary
    Get System Activity Trail

  • Operation id
    get_system_activity_trail_api_v1_management_audit_logs_get

  • Security
    OAuth2PasswordBearer

Parameters(Query)

search?: Partial(string) & Partial(null)
doctype_filter?: Partial(string) & Partial(null)
action_filter?: Partial(string) & Partial(null)
doc_id_filter?: Partial(integer) & Partial(null)

Responses

  • 200 Successful Response

application/json

{
  id: integer
  user_id?: Partial(integer) & Partial(null)
  doctype: string
  doc_id: integer
  action: string
  changes: {
  }
  timestamp: string
  user?: Partial(#/components/schemas/AuditOperatorSchema) & Partial(null)
}[]
  • 422 Validation Error

application/json

{
  detail: {
    loc?: Partial(string) & Partial(integer)[]
    msg: string
    type: string
    ctx: {
    }
  }[]
}

[GET]/api/v1/management/teams

  • Summary
    Get All Workspace Teams

  • Operation id
    get_all_workspace_teams_api_v1_management_teams_get

  • Security
    OAuth2PasswordBearer

Responses

  • 200 Successful Response

application/json

{
  id: integer
  name: string
  description?: Partial(string) & Partial(null)
  members: {
    id: integer
    name: string
    email: string
  }[]
}[]

[POST]/api/v1/management/teams

  • Summary
    Provision New Corporate Team

  • Operation id
    provision_new_corporate_team_api_v1_management_teams_post

  • Security
    OAuth2PasswordBearer

RequestBody

  • application/json
{
  name: string
  description?: Partial(string) & Partial(null)
}

Responses

  • 201 Successful Response

application/json

{
  id: integer
  name: string
  description?: Partial(string) & Partial(null)
  members: {
    id: integer
    name: string
    email: string
  }[]
}
  • 422 Validation Error

application/json

{
  detail: {
    loc?: Partial(string) & Partial(integer)[]
    msg: string
    type: string
    ctx: {
    }
  }[]
}

[PUT]/api/v1/management/teams/{team_id}

  • Summary
    Update Existing Corporate Team

  • Operation id
    update_existing_corporate_team_api_v1_management_teams__team_id__put

  • Security
    OAuth2PasswordBearer

RequestBody

  • application/json
{
  name: string
  description?: Partial(string) & Partial(null)
}

Responses

  • 200 Successful Response

application/json

{
  id: integer
  name: string
  description?: Partial(string) & Partial(null)
  members: {
    id: integer
    name: string
    email: string
  }[]
}
  • 422 Validation Error

application/json

{
  detail: {
    loc?: Partial(string) & Partial(integer)[]
    msg: string
    type: string
    ctx: {
    }
  }[]
}

[DELETE]/api/v1/management/teams/{team_id}

  • Summary
    Purge Corporate Team Workspace

  • Operation id
    purge_corporate_team_workspace_api_v1_management_teams__team_id__delete

  • Security
    OAuth2PasswordBearer

Responses

  • 204 Successful Response

  • 422 Validation Error

application/json

{
  detail: {
    loc?: Partial(string) & Partial(integer)[]
    msg: string
    type: string
    ctx: {
    }
  }[]
}

[POST]/api/v1/management/teams/{team_id}/members

  • Summary
    Add User To Team Boundary

  • Operation id
    add_user_to_team_boundary_api_v1_management_teams__team_id__members_post

  • Security
    OAuth2PasswordBearer

RequestBody

  • application/json
{
  user_id: integer
}

Responses

  • 201 Successful Response

application/json


  • 422 Validation Error

application/json

{
  detail: {
    loc?: Partial(string) & Partial(integer)[]
    msg: string
    type: string
    ctx: {
    }
  }[]
}

[DELETE]/api/v1/management/teams/{team_id}/members/{user_id}

  • Summary
    Remove User From Team Boundary

  • Operation id
    remove_user_from_team_boundary_api_v1_management_teams__team_id__members__user_id__delete

  • Security
    OAuth2PasswordBearer

Responses

  • 204 Successful Response

  • 422 Validation Error

application/json

{
  detail: {
    loc?: Partial(string) & Partial(integer)[]
    msg: string
    type: string
    ctx: {
    }
  }[]
}

[POST]/api/v1/crm/clients

  • Summary
    Create Crm Client

  • Operation id
    create_crm_client_api_v1_crm_clients_post

  • Security
    OAuth2PasswordBearer

RequestBody

  • application/json
{
  // Internal system identification client code
  code: string
  company_name: string
  industry?: Partial(string) & Partial(null)
  website?: Partial(string) & Partial(null)
  category_id?: Partial(integer) & Partial(null)
}

Responses

  • 201 Successful Response

application/json

{
  id: integer
  code: string
  company_name: string
  industry?: Partial(string) & Partial(null)
  website?: Partial(string) & Partial(null)
  creation: string
  owner_id: integer
  owner?: Partial(#/components/schemas/CRMOwnerSummaryResponse) & Partial(null)
  team_id?: Partial(integer) & Partial(null)
  category_id?: Partial(integer) & Partial(null)
  category?: Partial(#/components/schemas/CRMClientCategoryResponse) & Partial(null)
  contacts: {
    id: integer
    first_name: string
    last_name: string
    email: string
    phone?: Partial(string) & Partial(null)
    client_id?: Partial(integer) & Partial(null)
    is_primary: boolean
    creation: string
  }[]
}
  • 422 Validation Error

application/json

{
  detail: {
    loc?: Partial(string) & Partial(integer)[]
    msg: string
    type: string
    ctx: {
    }
  }[]
}

[GET]/api/v1/crm/clients

  • Summary
    Get All Crm Clients

  • Operation id
    get_all_crm_clients_api_v1_crm_clients_get

  • Security
    OAuth2PasswordBearer

Parameters(Query)

page?: integer //default: 1
page_size?: integer //default: 10
search?: Partial(string) & Partial(null)
search_field?: Partial(string) & Partial(null)
category_id?: Partial(integer) & Partial(null)
owner_id?: Partial(integer) & Partial(null)
team_id?: Partial(integer) & Partial(null)
sort_by?: Partial(string) & Partial(null)
sort_order?: Partial(string) & Partial(null)

Responses

  • 200 Successful Response

application/json

{
  total: integer
  items: {
    id: integer
    code: string
    company_name: string
    industry?: Partial(string) & Partial(null)
    website?: Partial(string) & Partial(null)
    creation: string
    owner_id: integer
    owner?: Partial(#/components/schemas/CRMOwnerSummaryResponse) & Partial(null)
    team_id?: Partial(integer) & Partial(null)
    category_id?: Partial(integer) & Partial(null)
    category?: Partial(#/components/schemas/CRMClientCategoryResponse) & Partial(null)
    contacts: {
      id: integer
      first_name: string
      last_name: string
      email: string
      phone?: Partial(string) & Partial(null)
      client_id?: Partial(integer) & Partial(null)
      is_primary: boolean
      creation: string
    }[]
  }[]
}
  • 422 Validation Error

application/json

{
  detail: {
    loc?: Partial(string) & Partial(integer)[]
    msg: string
    type: string
    ctx: {
    }
  }[]
}

[PUT]/api/v1/crm/clients/{client_id}

  • Summary
    Update Crm Client

  • Operation id
    update_crm_client_api_v1_crm_clients__client_id__put

  • Security
    OAuth2PasswordBearer

RequestBody

  • application/json
{
  // Internal system identification client code
  code: string
  company_name: string
  industry?: Partial(string) & Partial(null)
  website?: Partial(string) & Partial(null)
  category_id?: Partial(integer) & Partial(null)
}

Responses

  • 200 Successful Response

application/json

{
  id: integer
  code: string
  company_name: string
  industry?: Partial(string) & Partial(null)
  website?: Partial(string) & Partial(null)
  creation: string
  owner_id: integer
  owner?: Partial(#/components/schemas/CRMOwnerSummaryResponse) & Partial(null)
  team_id?: Partial(integer) & Partial(null)
  category_id?: Partial(integer) & Partial(null)
  category?: Partial(#/components/schemas/CRMClientCategoryResponse) & Partial(null)
  contacts: {
    id: integer
    first_name: string
    last_name: string
    email: string
    phone?: Partial(string) & Partial(null)
    client_id?: Partial(integer) & Partial(null)
    is_primary: boolean
    creation: string
  }[]
}
  • 422 Validation Error

application/json

{
  detail: {
    loc?: Partial(string) & Partial(integer)[]
    msg: string
    type: string
    ctx: {
    }
  }[]
}

[DELETE]/api/v1/crm/clients/{client_id}

  • Summary
    Delete Crm Client

  • Operation id
    delete_crm_client_api_v1_crm_clients__client_id__delete

  • Security
    OAuth2PasswordBearer

Responses

  • 204 Successful Response

  • 422 Validation Error

application/json

{
  detail: {
    loc?: Partial(string) & Partial(integer)[]
    msg: string
    type: string
    ctx: {
    }
  }[]
}

[GET]/api/v1/crm/contacts

  • Summary
    Get All Crm Contacts

  • Operation id
    get_all_crm_contacts_api_v1_crm_contacts_get

  • Security
    OAuth2PasswordBearer

Parameters(Query)

page?: integer //default: 1
page_size?: integer //default: 10
search?: Partial(string) & Partial(null)
search_field?: Partial(string) & Partial(null)
client_id?: Partial(integer) & Partial(null)
sort_by?: Partial(string) & Partial(null)
sort_order?: Partial(string) & Partial(null)

Responses

  • 200 Successful Response

application/json

{
  total: integer
  items: {
    id: integer
    first_name: string
    last_name: string
    email: string
    phone?: Partial(string) & Partial(null)
    client_id?: Partial(integer) & Partial(null)
    is_primary: boolean
    creation: string
  }[]
}
  • 422 Validation Error

application/json

{
  detail: {
    loc?: Partial(string) & Partial(integer)[]
    msg: string
    type: string
    ctx: {
    }
  }[]
}

[POST]/api/v1/crm/contacts

  • Summary
    Create Crm Contact

  • Operation id
    create_crm_contact_api_v1_crm_contacts_post

  • Security
    OAuth2PasswordBearer

RequestBody

  • application/json
{
  first_name: string
  last_name: string
  email: string
  phone?: Partial(string) & Partial(null)
  client_id?: Partial(integer) & Partial(null)
  is_primary?: boolean
}

Responses

  • 201 Successful Response

application/json

{
  id: integer
  first_name: string
  last_name: string
  email: string
  phone?: Partial(string) & Partial(null)
  client_id?: Partial(integer) & Partial(null)
  is_primary: boolean
  creation: string
}
  • 422 Validation Error

application/json

{
  detail: {
    loc?: Partial(string) & Partial(integer)[]
    msg: string
    type: string
    ctx: {
    }
  }[]
}

[PUT]/api/v1/crm/contacts/{contact_id}

  • Summary
    Update Crm Contact

  • Operation id
    update_crm_contact_api_v1_crm_contacts__contact_id__put

  • Security
    OAuth2PasswordBearer

RequestBody

  • application/json
{
  first_name: string
  last_name: string
  email: string
  phone?: Partial(string) & Partial(null)
  client_id?: Partial(integer) & Partial(null)
  is_primary?: boolean
}

Responses

  • 200 Successful Response

application/json

{
  id: integer
  first_name: string
  last_name: string
  email: string
  phone?: Partial(string) & Partial(null)
  client_id?: Partial(integer) & Partial(null)
  is_primary: boolean
  creation: string
}
  • 422 Validation Error

application/json

{
  detail: {
    loc?: Partial(string) & Partial(integer)[]
    msg: string
    type: string
    ctx: {
    }
  }[]
}

[DELETE]/api/v1/crm/contacts/{contact_id}

  • Summary
    Delete Crm Contact

  • Operation id
    delete_crm_contact_api_v1_crm_contacts__contact_id__delete

  • Security
    OAuth2PasswordBearer

Responses

  • 204 Successful Response

  • 422 Validation Error

application/json

{
  detail: {
    loc?: Partial(string) & Partial(integer)[]
    msg: string
    type: string
    ctx: {
    }
  }[]
}

[PATCH]/api/v1/crm/contacts/{contact_id}/set-primary

  • Summary
    Set Primary Crm Contact

  • Operation id
    set_primary_crm_contact_api_v1_crm_contacts__contact_id__set_primary_patch

  • Security
    OAuth2PasswordBearer

Responses

  • 200 Successful Response

application/json

{
  id: integer
  first_name: string
  last_name: string
  email: string
  phone?: Partial(string) & Partial(null)
  client_id?: Partial(integer) & Partial(null)
  is_primary: boolean
  creation: string
}
  • 422 Validation Error

application/json

{
  detail: {
    loc?: Partial(string) & Partial(integer)[]
    msg: string
    type: string
    ctx: {
    }
  }[]
}

[PATCH]/api/v1/crm/contacts/{contact_id}/unset-primary

  • Summary
    Unset Primary Crm Contact

  • Operation id
    unset_primary_crm_contact_api_v1_crm_contacts__contact_id__unset_primary_patch

  • Security
    OAuth2PasswordBearer

Responses

  • 200 Successful Response

application/json

{
  id: integer
  first_name: string
  last_name: string
  email: string
  phone?: Partial(string) & Partial(null)
  client_id?: Partial(integer) & Partial(null)
  is_primary: boolean
  creation: string
}
  • 422 Validation Error

application/json

{
  detail: {
    loc?: Partial(string) & Partial(integer)[]
    msg: string
    type: string
    ctx: {
    }
  }[]
}

  • Summary
    Unlink Contact From Client

  • Operation id
    unlink_contact_from_client_api_v1_crm_contacts__contact_id__unlink_patch

  • Security
    OAuth2PasswordBearer

Responses

  • 200 Successful Response

application/json

{
  id: integer
  first_name: string
  last_name: string
  email: string
  phone?: Partial(string) & Partial(null)
  client_id?: Partial(integer) & Partial(null)
  is_primary: boolean
  creation: string
}
  • 422 Validation Error

application/json

{
  detail: {
    loc?: Partial(string) & Partial(integer)[]
    msg: string
    type: string
    ctx: {
    }
  }[]
}

[GET]/api/v1/crm/categories

  • Summary
    Get All Client Categories

  • Operation id
    get_all_client_categories_api_v1_crm_categories_get

  • Security
    OAuth2PasswordBearer

Responses

  • 200 Successful Response

application/json

{
  id: integer
  name: string
  description?: Partial(string) & Partial(null)
}[]

[POST]/api/v1/crm/categories

  • Summary
    Create Client Category

  • Operation id
    create_client_category_api_v1_crm_categories_post

  • Security
    OAuth2PasswordBearer

RequestBody

  • application/json
{
  name: string
  description?: Partial(string) & Partial(null)
}

Responses

  • 201 Successful Response

application/json

{
  id: integer
  name: string
  description?: Partial(string) & Partial(null)
}
  • 422 Validation Error

application/json

{
  detail: {
    loc?: Partial(string) & Partial(integer)[]
    msg: string
    type: string
    ctx: {
    }
  }[]
}

[PUT]/api/v1/crm/categories/{cat_id}

  • Summary
    Update Client Category

  • Operation id
    update_client_category_api_v1_crm_categories__cat_id__put

  • Security
    OAuth2PasswordBearer

RequestBody

  • application/json
{
  name: string
  description?: Partial(string) & Partial(null)
}

Responses

  • 200 Successful Response

application/json

{
  id: integer
  name: string
  description?: Partial(string) & Partial(null)
}
  • 422 Validation Error

application/json

{
  detail: {
    loc?: Partial(string) & Partial(integer)[]
    msg: string
    type: string
    ctx: {
    }
  }[]
}

[DELETE]/api/v1/crm/categories/{cat_id}

  • Summary
    Delete Client Category

  • Operation id
    delete_client_category_api_v1_crm_categories__cat_id__delete

  • Security
    OAuth2PasswordBearer

Responses

  • 204 Successful Response

  • 422 Validation Error

application/json

{
  detail: {
    loc?: Partial(string) & Partial(integer)[]
    msg: string
    type: string
    ctx: {
    }
  }[]
}

[GET]/api/v1/crm/clients/{client_id}/credentials

  • Summary
    Get Client Credentials

  • Operation id
    get_client_credentials_api_v1_crm_clients__client_id__credentials_get

  • Security
    OAuth2PasswordBearer

Responses

  • 200 Successful Response

application/json

{
  id: integer
  client_id: integer
  service_name: string
  credential_type: string
  username?: Partial(string) & Partial(null)
  password?: Partial(string) & Partial(null)
  token?: Partial(string) & Partial(null)
  creation: string
}[]
  • 422 Validation Error

application/json

{
  detail: {
    loc?: Partial(string) & Partial(integer)[]
    msg: string
    type: string
    ctx: {
    }
  }[]
}

[POST]/api/v1/crm/clients/{client_id}/credentials

  • Summary
    Add Client Credential

  • Operation id
    add_client_credential_api_v1_crm_clients__client_id__credentials_post

  • Security
    OAuth2PasswordBearer

RequestBody

  • application/json
{
  service_name: string
  // Must be 'user_pass' or 'token'
  credential_type: string
  username?: Partial(string) & Partial(null)
  password?: Partial(string) & Partial(null)
  token?: Partial(string) & Partial(null)
}

Responses

  • 201 Successful Response

application/json

{
  id: integer
  client_id: integer
  service_name: string
  credential_type: string
  username?: Partial(string) & Partial(null)
  password?: Partial(string) & Partial(null)
  token?: Partial(string) & Partial(null)
  creation: string
}
  • 422 Validation Error

application/json

{
  detail: {
    loc?: Partial(string) & Partial(integer)[]
    msg: string
    type: string
    ctx: {
    }
  }[]
}

[PUT]/api/v1/crm/clients/{client_id}/credentials/{cred_id}

  • Summary
    Update Client Credential

  • Operation id
    update_client_credential_api_v1_crm_clients__client_id__credentials__cred_id__put

  • Security
    OAuth2PasswordBearer

RequestBody

  • application/json
{
  service_name: string
  // Must be 'user_pass' or 'token'
  credential_type: string
  username?: Partial(string) & Partial(null)
  password?: Partial(string) & Partial(null)
  token?: Partial(string) & Partial(null)
}

Responses

  • 200 Successful Response

application/json

{
  id: integer
  client_id: integer
  service_name: string
  credential_type: string
  username?: Partial(string) & Partial(null)
  password?: Partial(string) & Partial(null)
  token?: Partial(string) & Partial(null)
  creation: string
}
  • 422 Validation Error

application/json

{
  detail: {
    loc?: Partial(string) & Partial(integer)[]
    msg: string
    type: string
    ctx: {
    }
  }[]
}

[DELETE]/api/v1/crm/clients/{client_id}/credentials/{cred_id}

  • Summary
    Delete Client Credential

  • Operation id
    delete_client_credential_api_v1_crm_clients__client_id__credentials__cred_id__delete

  • Security
    OAuth2PasswordBearer

Responses

  • 204 Successful Response

  • 422 Validation Error

application/json

{
  detail: {
    loc?: Partial(string) & Partial(integer)[]
    msg: string
    type: string
    ctx: {
    }
  }[]
}

[PUT]/api/v1/crm/transfer/client/{client_id}

  • Summary
    Transfer Client Records

  • Operation id
    transfer_client_records_api_v1_crm_transfer_client__client_id__put

  • Description
    Dynamically resolves Client model, executes ownership transfer, and validates RBAC boundaries.

  • Security
    OAuth2PasswordBearer

RequestBody

  • application/json
{
  new_owner_id?: Partial(integer) & Partial(null)
  new_team_id?: Partial(integer) & Partial(null)
}

Responses

  • 200 Successful Response

application/json


  • 422 Validation Error

application/json

{
  detail: {
    loc?: Partial(string) & Partial(integer)[]
    msg: string
    type: string
    ctx: {
    }
  }[]
}

[GET]/api/v1/notifications

  • Summary
    Get User Notifications

  • Operation id
    get_user_notifications_api_v1_notifications_get

  • Security
    OAuth2PasswordBearer

Parameters(Query)

view_mode?: string //default: unread

Responses

  • 200 Successful Response

application/json

{
}[]
  • 422 Validation Error

application/json

{
  detail: {
    loc?: Partial(string) & Partial(integer)[]
    msg: string
    type: string
    ctx: {
    }
  }[]
}

[POST]/api/v1/notifications/{notification_id}/read

  • Summary
    Mark Notification As Seen

  • Operation id
    mark_notification_as_seen_api_v1_notifications__notification_id__read_post

  • Security
    OAuth2PasswordBearer

Responses

  • 204 Successful Response

  • 422 Validation Error

application/json

{
  detail: {
    loc?: Partial(string) & Partial(integer)[]
    msg: string
    type: string
    ctx: {
    }
  }[]
}

[POST]/api/v1/notifications/read-all

  • Summary
    Mark All Notifications As Seen

  • Operation id
    mark_all_notifications_as_seen_api_v1_notifications_read_all_post

  • Security
    OAuth2PasswordBearer

Responses

  • 204 Successful Response

[POST]/api/v1/notifications/broadcast

  • Summary
    Admin Broadcast Notification

  • Operation id
    admin_broadcast_notification_api_v1_notifications_broadcast_post

  • Security
    OAuth2PasswordBearer

RequestBody

  • application/json
{
  title: string
  message: string
  severity: string
  target_type: string
  target_id?: Partial(integer) & Partial(null)
}

Responses

  • 201 Successful Response

application/json


  • 422 Validation Error

application/json

{
  detail: {
    loc?: Partial(string) & Partial(integer)[]
    msg: string
    type: string
    ctx: {
    }
  }[]
}

[GET]/api/v1/message-hub/messages/{message_id}/fetch-body

  • Summary
    Fetch Message Body On Demand

  • Operation id
    fetch_message_body_on_demand_api_v1_message_hub_messages__message_id__fetch_body_get

  • Description
    Triggers on-demand scraping when opening a portal message with is_lazy_loaded=True.

Responses

  • 200 Successful Response

application/json


  • 422 Validation Error

application/json

{
  detail: {
    loc?: Partial(string) & Partial(integer)[]
    msg: string
    type: string
    ctx: {
    }
  }[]
}

[POST]/api/v1/message-hub/messages/{message_id}/fetch-body

  • Summary
    Fetch Lazy Loaded Body

  • Operation id
    fetch_lazy_loaded_body_api_v1_message_hub_messages__message_id__fetch_body_post

  • Description
    On-demand content retrieval for portal-scraped or truncated messages.

Responses

  • 200 Successful Response

application/json


  • 422 Validation Error

application/json

{
  detail: {
    loc?: Partial(string) & Partial(integer)[]
    msg: string
    type: string
    ctx: {
    }
  }[]
}

[POST]/api/v1/message-hub/channels/{channel_id}/sync

  • Summary
    Trigger Manual Channel Sync

  • Operation id
    trigger_manual_channel_sync_api_v1_message_hub_channels__channel_id__sync_post

  • Description
    Enqueues an immediate background IMAP sync job via Celery.

Responses

  • 200 Successful Response

application/json


  • 422 Validation Error

application/json

{
  detail: {
    loc?: Partial(string) & Partial(integer)[]
    msg: string
    type: string
    ctx: {
    }
  }[]
}

[POST]/api/v1/message-hub/channels

  • Summary
    Create Communication Channel

  • Operation id
    create_communication_channel_api_v1_message_hub_channels_post

  • Description
    Creates a new communication channel (Private or Shared email inbox).

Parameters(Query)

current_user_id?: integer //default: 1

RequestBody

  • application/json
{
  name: string
  channel_type: string
  scope_type: string
  target_folder?: string //default: INBOX
  team_id?: Partial(integer) & Partial(null)
  client_id?: Partial(integer) & Partial(null)
  imap_host: string
  imap_port?: integer //default: 993
  smtp_host: string
  smtp_port?: integer //default: 587
  username: string
  password: string
}

Responses

  • 200 Successful Response

application/json


  • 422 Validation Error

application/json

{
  detail: {
    loc?: Partial(string) & Partial(integer)[]
    msg: string
    type: string
    ctx: {
    }
  }[]
}

[GET]/api/v1/message-hub/channels

  • Summary
    List User Channels

  • Operation id
    list_user_channels_api_v1_message_hub_channels_get

  • Description
    Lists channels owned by current user or assigned to their team.

Parameters(Query)

current_user_id?: integer //default: 1

Responses

  • 200 Successful Response

application/json


  • 422 Validation Error

application/json

{
  detail: {
    loc?: Partial(string) & Partial(integer)[]
    msg: string
    type: string
    ctx: {
    }
  }[]
}

[POST]/api/v1/message-hub/channels/{channel_id}/test-connection

  • Summary
    Test Channel Connection

  • Operation id
    test_channel_connection_api_v1_message_hub_channels__channel_id__test_connection_post

  • Description
    Synchronously attempts IMAP connection to validate credentials.

Responses

  • 200 Successful Response

application/json


  • 422 Validation Error

application/json

{
  detail: {
    loc?: Partial(string) & Partial(integer)[]
    msg: string
    type: string
    ctx: {
    }
  }[]
}

[GET]/api/v1/message-hub/threads

  • Summary
    List Threads

  • Operation id
    list_threads_api_v1_message_hub_threads_get

  • Description
    Lists message threads filtered by status, client, or team member.

Parameters(Query)

client_id?: Partial(integer) & Partial(null)
status?: Partial(string) & Partial(null)
assigned_user_id?: Partial(integer) & Partial(null)
limit?: integer //default: 50
offset?: integer

Responses

  • 200 Successful Response

application/json


  • 422 Validation Error

application/json

{
  detail: {
    loc?: Partial(string) & Partial(integer)[]
    msg: string
    type: string
    ctx: {
    }
  }[]
}

[GET]/api/v1/message-hub/threads/{thread_id}

  • Summary
    Get Thread Detail

  • Operation id
    get_thread_detail_api_v1_message_hub_threads__thread_id__get

  • Description
    Retrieves a complete thread timeline alongside active collision warnings.

Parameters(Query)

current_user_id?: integer //default: 1

Responses

  • 200 Successful Response

application/json


  • 422 Validation Error

application/json

{
  detail: {
    loc?: Partial(string) & Partial(integer)[]
    msg: string
    type: string
    ctx: {
    }
  }[]
}

[GET]/api/v1/message-hub/contacts/{contact_id}/threads

  • Summary
    Get Threads For Contact

  • Operation id
    get_threads_for_contact_api_v1_message_hub_contacts__contact_id__threads_get

  • Description
    Retrieve all communication threads associated with a specific contact.

Responses

  • 200 Successful Response

application/json

{
  id: integer
  subject?: Partial(string) & Partial(null)
  status: string
  contact_id?: Partial(integer) & Partial(null)
  client_id?: Partial(integer) & Partial(null)
  assigned_user_id?: Partial(integer) & Partial(null)
  assigned_team_id?: Partial(integer) & Partial(null)
  is_client_bound: boolean
  last_activity_at: string
  messages: {
    id: integer
    direction: string
    sender_address: string
    recipient_address: string
    subject: string
    body: string
    created_at: string
  }[]
}[]
  • 422 Validation Error

application/json

{
  detail: {
    loc?: Partial(string) & Partial(integer)[]
    msg: string
    type: string
    ctx: {
    }
  }[]
}

[POST]/api/v1/message-hub/threads/{thread_id}/reply

  • Summary
    Send Thread Reply

  • Operation id
    send_thread_reply_api_v1_message_hub_threads__thread_id__reply_post

  • Description
    Dispatches an email reply via channel SMTP and records the outbound message.

Parameters(Query)

current_user_id?: integer //default: 1

RequestBody

  • application/json
{
  channel_id: integer
  body: string
  recipient_address: string
  subject?: Partial(string) & Partial(null)
}

Responses

  • 200 Successful Response

application/json


  • 422 Validation Error

application/json

{
  detail: {
    loc?: Partial(string) & Partial(integer)[]
    msg: string
    type: string
    ctx: {
    }
  }[]
}

[POST]/api/v1/message-hub/threads/{thread_id}/locks

  • Summary
    Heartbeat Presence Lock

  • Operation id
    heartbeat_presence_lock_api_v1_message_hub_threads__thread_id__locks_post

RequestBody

  • application/json
{
  user_id: integer
  user_name: string
  action_type?: enum[VIEWING, TYPING] //default: VIEWING
  duration_seconds?: integer //default: 30
}

Responses

  • 200 Successful Response

application/json

{
  id: integer
  thread_id: integer
  user_id: integer
  user_name: string
  action_type: string
  expires_at: string
}
  • 422 Validation Error

application/json

{
  detail: {
    loc?: Partial(string) & Partial(integer)[]
    msg: string
    type: string
    ctx: {
    }
  }[]
}

[POST]/api/v1/message-hub/test-imap-poll

  • Summary
    Trigger Manual Imap Poll

  • Operation id
    trigger_manual_imap_poll_api_v1_message_hub_test_imap_poll_post

  • Description
    Manually trigger an IMAP polling cycle for testing.

Responses

  • 200 Successful Response

application/json



[GET]/v1/health

  • Summary
    System Heartbeat Check

  • Operation id
    system_heartbeat_check_v1_health_get

Responses

  • 200 Successful Response

application/json



[GET]/api/v1/trigger-log-test

  • Summary
    Trigger Log Test

  • Operation id
    trigger_log_test_api_v1_trigger_log_test_get

Responses

  • 200 Successful Response

application/json


References

#/components/schemas/ActionEnum

enum[CREATE, READ, WRITE, DELETE]

#/components/schemas/ActivityLogResponseSchema

{
  id: integer
  user_id?: Partial(integer) & Partial(null)
  doctype: string
  doc_id: integer
  action: string
  changes: {
  }
  timestamp: string
  user?: Partial(#/components/schemas/AuditOperatorSchema) & Partial(null)
}

#/components/schemas/AddMemberPayloadSchema

{
  user_id: integer
}

#/components/schemas/AuditOperatorSchema

{
  id: integer
  name: string
  email: string
}

#/components/schemas/Body_login_access_token_api_v1_auth_login_post

{
  grant_type?: Partial(string) & Partial(null)
  username: string
  password: string
  scope?: string
  client_id?: Partial(string) & Partial(null)
  client_secret?: Partial(string) & Partial(null)
}

#/components/schemas/BroadcastPayloadSchema

{
  title: string
  message: string
  severity: string
  target_type: string
  target_id?: Partial(integer) & Partial(null)
}

#/components/schemas/CRMClientCategoryCreate

{
  name: string
  description?: Partial(string) & Partial(null)
}

#/components/schemas/CRMClientCategoryResponse

{
  id: integer
  name: string
  description?: Partial(string) & Partial(null)
}

#/components/schemas/CRMClientCreate

{
  // Internal system identification client code
  code: string
  company_name: string
  industry?: Partial(string) & Partial(null)
  website?: Partial(string) & Partial(null)
  category_id?: Partial(integer) & Partial(null)
}

#/components/schemas/CRMClientCredentialCreate

{
  service_name: string
  // Must be 'user_pass' or 'token'
  credential_type: string
  username?: Partial(string) & Partial(null)
  password?: Partial(string) & Partial(null)
  token?: Partial(string) & Partial(null)
}

#/components/schemas/CRMClientCredentialResponse

{
  id: integer
  client_id: integer
  service_name: string
  credential_type: string
  username?: Partial(string) & Partial(null)
  password?: Partial(string) & Partial(null)
  token?: Partial(string) & Partial(null)
  creation: string
}

#/components/schemas/CRMClientEnvelopeResponse

{
  total: integer
  items: {
    id: integer
    code: string
    company_name: string
    industry?: Partial(string) & Partial(null)
    website?: Partial(string) & Partial(null)
    creation: string
    owner_id: integer
    owner?: Partial(#/components/schemas/CRMOwnerSummaryResponse) & Partial(null)
    team_id?: Partial(integer) & Partial(null)
    category_id?: Partial(integer) & Partial(null)
    category?: Partial(#/components/schemas/CRMClientCategoryResponse) & Partial(null)
    contacts: {
      id: integer
      first_name: string
      last_name: string
      email: string
      phone?: Partial(string) & Partial(null)
      client_id?: Partial(integer) & Partial(null)
      is_primary: boolean
      creation: string
    }[]
  }[]
}

#/components/schemas/CRMClientResponse

{
  id: integer
  code: string
  company_name: string
  industry?: Partial(string) & Partial(null)
  website?: Partial(string) & Partial(null)
  creation: string
  owner_id: integer
  owner?: Partial(#/components/schemas/CRMOwnerSummaryResponse) & Partial(null)
  team_id?: Partial(integer) & Partial(null)
  category_id?: Partial(integer) & Partial(null)
  category?: Partial(#/components/schemas/CRMClientCategoryResponse) & Partial(null)
  contacts: {
    id: integer
    first_name: string
    last_name: string
    email: string
    phone?: Partial(string) & Partial(null)
    client_id?: Partial(integer) & Partial(null)
    is_primary: boolean
    creation: string
  }[]
}

#/components/schemas/CRMContactCreate

{
  first_name: string
  last_name: string
  email: string
  phone?: Partial(string) & Partial(null)
  client_id?: Partial(integer) & Partial(null)
  is_primary?: boolean
}

#/components/schemas/CRMContactEnvelopeResponse

{
  total: integer
  items: {
    id: integer
    first_name: string
    last_name: string
    email: string
    phone?: Partial(string) & Partial(null)
    client_id?: Partial(integer) & Partial(null)
    is_primary: boolean
    creation: string
  }[]
}

#/components/schemas/CRMContactResponse

{
  id: integer
  first_name: string
  last_name: string
  email: string
  phone?: Partial(string) & Partial(null)
  client_id?: Partial(integer) & Partial(null)
  is_primary: boolean
  creation: string
}

#/components/schemas/CRMOwnerSummaryResponse

{
  id: integer
  name: string
  email: string
}

#/components/schemas/ChannelCreateSchema

{
  name: string
  channel_type: string
  scope_type: string
  target_folder?: string //default: INBOX
  team_id?: Partial(integer) & Partial(null)
  client_id?: Partial(integer) & Partial(null)
  imap_host: string
  imap_port?: integer //default: 993
  smtp_host: string
  smtp_port?: integer //default: 587
  username: string
  password: string
}

#/components/schemas/CredentialSchema

{
  target_service: string
  api_key?: Partial(string) & Partial(null)
  api_secret?: Partial(string) & Partial(null)
  additional_meta?: Partial(string) & Partial(null)
}

#/components/schemas/DocTypeEnum

enum[USER, TICKET, ROLE, CLIENT, CONTACT, CLIENT_CATEGORY, ADMIN, NOTIFICATION, EXTERNAL_MESSAGE]

#/components/schemas/HTTPValidationError

{
  detail: {
    loc?: Partial(string) & Partial(integer)[]
    msg: string
    type: string
    ctx: {
    }
  }[]
}

#/components/schemas/MessageReplySchema

{
  channel_id: integer
  body: string
  recipient_address: string
  subject?: Partial(string) & Partial(null)
}

#/components/schemas/MessageSummarySchema

{
  id: integer
  direction: string
  sender_address: string
  recipient_address: string
  subject: string
  body: string
  created_at: string
}

#/components/schemas/PermissionSchema

{
  id?: Partial(integer) & Partial(null)
  role_id?: Partial(integer) & Partial(null)
  doctype: enum[USER, TICKET, ROLE, CLIENT, CONTACT, CLIENT_CATEGORY, ADMIN, NOTIFICATION, EXTERNAL_MESSAGE]
  action: enum[CREATE, READ, WRITE, DELETE]
  access_level: string
}

#/components/schemas/RoleCreate

{
  name: string
  description?: Partial(string) & Partial(null)
  permissions: {
  }[]
}

#/components/schemas/RoleResponse

{
  id: integer
  name: string
  description?: Partial(string) & Partial(null)
  permissions: {
    id?: Partial(integer) & Partial(null)
    role_id?: Partial(integer) & Partial(null)
    doctype: enum[USER, TICKET, ROLE, CLIENT, CONTACT, CLIENT_CATEGORY, ADMIN, NOTIFICATION, EXTERNAL_MESSAGE]
    action: enum[CREATE, READ, WRITE, DELETE]
    access_level: string
  }[]
}

#/components/schemas/TeamCreateSchema

{
  name: string
  description?: Partial(string) & Partial(null)
}

#/components/schemas/TeamMemberSchema

{
  id: integer
  name: string
  email: string
}

#/components/schemas/TeamResponseSchema

{
  id: integer
  name: string
  description?: Partial(string) & Partial(null)
  members: {
    id: integer
    name: string
    email: string
  }[]
}

#/components/schemas/ThreadLockCreate

{
  user_id: integer
  user_name: string
  action_type?: enum[VIEWING, TYPING] //default: VIEWING
  duration_seconds?: integer //default: 30
}

#/components/schemas/ThreadLockResponse

{
  id: integer
  thread_id: integer
  user_id: integer
  user_name: string
  action_type: string
  expires_at: string
}

#/components/schemas/ThreadReplyCreateSchema

{
  body: string
  recipient_address?: Partial(string) & Partial(null)
  channel_id?: Partial(integer) & Partial(null)
}

#/components/schemas/ThreadResponseSchema

{
  id: integer
  subject?: Partial(string) & Partial(null)
  status: string
  contact_id?: Partial(integer) & Partial(null)
  client_id?: Partial(integer) & Partial(null)
  assigned_user_id?: Partial(integer) & Partial(null)
  assigned_team_id?: Partial(integer) & Partial(null)
  is_client_bound: boolean
  last_activity_at: string
  messages: {
    id: integer
    direction: string
    sender_address: string
    recipient_address: string
    subject: string
    body: string
    created_at: string
  }[]
}

#/components/schemas/TicketCreate

{
  subject: string
  description: string
  priority?: enum[Low, Medium, High]
  raised_by_id: integer
}

#/components/schemas/TicketPriority

enum[Low, Medium, High]

#/components/schemas/TicketReplyCreate

{
  message: string
}

#/components/schemas/TicketResponse

{
  id: integer
  subject: string
  description: string
  priority: string
  status: string
  creation: string
  raised_by_id: integer
}

#/components/schemas/TicketStatus

enum[Open, Replied, Closed]

#/components/schemas/TicketStatusUpdate

{
  status: enum[Open, Replied, Closed]
}

#/components/schemas/TransferClientSchema

{
  new_owner_id?: Partial(integer) & Partial(null)
  new_team_id?: Partial(integer) & Partial(null)
}

#/components/schemas/UserDetailedResponse

{
  id: integer
  email: string
  name: string
  roles: {
    id: integer
    name: string
    description?: Partial(string) & Partial(null)
    permissions: {
      id?: Partial(integer) & Partial(null)
      role_id?: Partial(integer) & Partial(null)
      doctype: enum[USER, TICKET, ROLE, CLIENT, CONTACT, CLIENT_CATEGORY, ADMIN, NOTIFICATION, EXTERNAL_MESSAGE]
      action: enum[CREATE, READ, WRITE, DELETE]
      access_level: string
    }[]
  }[]
  is_active: boolean
  credentials: {
    target_service: string
    api_key?: Partial(string) & Partial(null)
    api_secret?: Partial(string) & Partial(null)
    additional_meta?: Partial(string) & Partial(null)
  }[]
  teams: {
    id: integer
    name: string
  }[]
}

#/components/schemas/UserManagementUpdate

{
  email?: Partial(string) & Partial(null)
  name?: Partial(string) & Partial(null)
  role_ids?: Partial(integer[]) & Partial(null)
  is_active?: Partial(boolean) & Partial(null)
  password?: Partial(string) & Partial(null)
  team_ids?: Partial(integer[]) & Partial(null)
  credentials?: Partial({
     target_service: string
     api_key?: Partial(string) & Partial(null)
     api_secret?: Partial(string) & Partial(null)
     additional_meta?: Partial(string) & Partial(null)
   }[]) & Partial(null)
}

#/components/schemas/UserPasswordChangeSchema

{
  current_password: string
  new_password: string
}

#/components/schemas/UserTeamSummarySchema

{
  id: integer
  name: string
}

#/components/schemas/ValidationError

{
  loc?: Partial(string) & Partial(integer)[]
  msg: string
  type: string
  ctx: {
  }
}

#/components/securitySchemes/OAuth2PasswordBearer

oauth2