System API Reference
Comprehensive reference for all Havosoft API endpoints, categorized under the Unity System and Salecloud System. These APIs handle Single Sign-On, data aggregation, operational synchronization, and client modules.
/api/login
SSO & Authentication
These endpoints manage the identity handshake between Unity and external applications. They handle token validation, company mapping, and mobile authentication flows.
Validates a temporary token generated by the Unity launcher to authenticate a staff member via SSO.
{ "token": "sso_token_string", "email": "staff@example.com" }
staff_data
Returns all companies that the given staff member has been mapped to across the Unity group.
{ "email": "staff@example.com" }
Authenticates a user for the Unity Mobile App and issues a Bearer Token for subsequent API requests.
{ "email": "staff@example.com", "password": "password123", "device_name": "iPhone 15" }
Global Intelligence
These endpoints fetch real-time data from all active subsidiaries using the GraphQL bridge. All endpoints require a Bearer Token. Data is aggregated across the entire company group.
| Method | Endpoint | Data Returned |
|---|---|---|
| GET | /api/sso/global-staff | Combined staff directory from all companies. |
| GET | /api/sso/global-leads | Unified sales leads and pipeline data. |
| GET | /api/sso/global-deals | All active deals and opportunities. |
| GET | /api/sso/global-tasks | Pending tasks assigned to the authenticated user. |
| GET | /api/sso/global-tickets | Support tickets from all helpdesks. |
| GET | /api/sso/global-announcements | Group-wide announcement feed. |
| GET | /api/sso/global-activity-logs | Security and audit logs from all instances. |
| GET | /api/sso/global-invoices | Aggregated financial billing data. |
| GET | /api/sso/global-payments | Payment history across the group. |
Operations & Sync
Advanced APIs for pushing data from the Hub back to subsidiary ERPs. These endpoints require a valid Bearer Token and are used for payroll synchronization and document storage.
Pushes a calculated payroll history entry to a specified subsidiary ERP, including salary, bonuses, and deductions for a given month.
{ "company_id": 1, "remote_staff_id": 10, "payroll_data": { "net_salary": 5000, "month": "May", "year": "2026", "bonuses": [], "deductions": [] } }
Stores a payslip PDF on Unity Hub and syncs the document link back to the subsidiary ERP. The PDF must be provided as a Base64-encoded string.
{ "company_id": 1, "remote_staff_id": 10, "month": "May", "year": "2026", "payslip_pdf": "base64_encoded_string", "file_name": "custom_name.pdf" }
Mobile Monitoring
Endpoints optimized for the Unity Mobile App dashboard. These return lightweight, summarized data designed for mobile consumption. All require a Bearer Token.
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/mobile/activities | Simplified security activity feed for the mobile dashboard. |
| GET | /api/mobile/tickets/count | Summary counts for support ticket statuses (open, pending, resolved). |
Sales Cloud: Auth & Passwords
Authentication and password recovery endpoints for the Sales Cloud module. These handle public logins, OTP requests, OTP validation, and password resetting.
Authenticate staff members and return a Bearer Token.
{ "email": "staff@example.com", "password": "password123" }
{ "user": { "staffid": 1, "email": "staff@example.com", "firstname": "John", "lastname": "Doe", "facebook": "...", "linkedin": "...", "skype": "...", "phonenumber": "...", "profile_image": "profile.jpg", "role": "Sales Rep", "small_img": "https://erp.collaboratoor.com/uploads/.../thumb_...", "thumb_img": "https://erp.collaboratoor.com/uploads/.../small_..." }, "token": "1|abcdef123456..." }
Request a password reset OTP code sent via email.
{ "email": "staff@example.com" }
{ "message": "success" }
Verify the OTP received via email and return an access token to authorize password setting.
{ "email": "staff@example.com", "otp": "1234" }
{ "message": "OTP verification successful", "token": "2|ghijk789..." }
Resend the verification OTP code if the time since the last mail exceeds 2 minutes.
{ "email": "staff@example.com" }
{ "message": "Verification code has been sent to your email successfully" }
Sales Cloud: Jobs, Roles & Depts
Retrieve lists of active departments, positions, and company roles. These endpoints are public and do not require Bearer authentication.
Retrieve a list of all company departments (with sensitive columns like email password excluded).
{ "message": "success", "departments": [ { "departmentid": 1, "name": "Sales", "email": "sales@company.com", "hidefromclient": 0 } ] }
Fetch all job positions and roles defined in the system.
{ "message": "success", "positions": [ { "position_id": 1, "position_name": "Sales Manager" } ], "roles": [ { "roleid": 1, "name": "Administrator" } ] }
Sales Cloud: Deals Management
Complete suite for deal pipelines, deal sources, stages, individual deal tracking, and goal progress. Private endpoints require a valid Bearer Token.
Retrieve all deal pipelines ordered by their layout hierarchy.
{ "pipelines": [ { "pipeline_id": 1, "pipeline_name": "Standard Sales", "description": "...", "order": 1 } ] }
Fetch all available deal/lead sources.
{ "sources": [ { "source_id": 1, "source_name": "Google Search" } ] }
Get stages in all pipelines, optionally filtered by a specific pipeline.
| Parameter | Type | Required | Description |
|---|---|---|---|
| pipeline_id | integer | No | Filter stages by a specific pipeline ID. |
{ "stages": [ { "stage_id": 1, "stage_name": "Contact Initiated", "pipeline_id": 1, "stage_order": 1 } ] }
Fetch all deals assigned to the currently authenticated staff member, with associated staff details.
{ "message": "success", "deals": [ { "id": 5, "title": "Enterprise Cloud Setup", "deal_value": 150000, "status": "active", "pipeline": "Standard Sales", "stage": "Proposal Sent", "source": "Cold Calling", "staff_members": [ { "staffid": 1, "firstname": "John", "lastname": "Doe", "profile_image": "..." } ] } ] }
View the complete configuration, pipeline details, and active stages for a single deal.
{ "message": "success", "deal": { "id": 5, "title": "Enterprise Cloud Setup", "deal_value": 150000, "status": "active" }, "pipeline": { "pipeline_id": 1, "pipeline_name": "Standard Sales" }, "current_stage": { "stage_id": 3, "stage_name": "Proposal Sent" }, "stages": [] }
Create a new deal and assign the owner.
{ "title": "Enterprise Cloud Setup", "deal_value": 150000, "source_id": 1, "pipeline_id": 1, "stage_id": 1, "default_deal_owner": 1 }
{ "status": true, "message": "Deal added successfully.", "deal": { "id": 6, "title": "Enterprise Cloud Setup" } }
Update an existing deal's metrics or status.
{ "title": "Enterprise Cloud Setup Updated", "deal_value": 160000 }
{ "status": true, "message": "Deal updated successfully.", "deal": { "id": 5, "title": "Enterprise Cloud Setup Updated", "deal_value": 160000 } }
Permanently delete a deal.
{ "status": true, "message": "Deal deleted successfully." }
Retrieve in-app notifications for the authenticated user.
| Parameter | Type | Required | Description |
|---|---|---|---|
| read | boolean | No | Filter notifications by read status (defaults to false). |
{ "notifications": [ { "id": 12, "touserid": 1, "description": "New lead assigned", "isread": 0, "date": "2026-05-19" } ] }
Sales Cloud: Leads Management
Complete system for managing, tracking, updating, adding notes/reminders/documents to, and converting leads into system clients.
List all active unconverted leads assigned to the logged-in user.
{ "message": "success", "leads": [ { "id": 10, "name": "Jane Sarah Smith", "company": "Smith Corp", "email": "jane@smith.com", "phonenumber": "08012345678", "status": "In Progress", "source": "Website Form", "country": "Nigeria" } ] }
Retrieve dropdown values for all Lead Statuses and Lead Sources.
{ "message": "success", "status": [ { "id": 1, "name": "Attempted to Contact" } ], "sources": [ { "id": 1, "name": "Web Search" } ] }
Fetch all available system countries.
{ "message": "success", "countries": [ { "country_id": 1, "short_name": "NG", "long_name": "Nigeria" } ] }
Create a new lead record.
{ "firstname": "Jane", "lastname": "Smith", "middlename": "Sarah", "phonenumber": 2348012345678, "is_public": 1, "source": "Website", "status": "New", "email": "jane@smith.com", "lead_value": 1500.00 }
{ "message": "Success" }
Update an existing lead record by Route ID.
{ "firstname": "Jane", "lastname": "Smith", "status": "In Progress" }
{ "message": "Success" }
Retrieve chronological timeline notes written on a lead.
{ "message": "Success", "notes": [ { "id": 1, "description": "Met client today", "dateadded": "2026-05-19", "firstname": "John" } ] }
Add a new note to a lead and optionally update the lastcontact date.
{ "note": "Called customer and resolved queries.", "lastcontact": "2026-05-19 12:00:00" }
Delete a lead note by its ID.
Fetch all tasks/reminders created under a specific lead.
{ "message": "Success", "reminders": [ { "id": 1, "description": "Call client back", "date": "2026-05-20" } ] }
Add a new future reminder for a lead.
{ "reminder": "Call client back", "date": "2026-05-20" }
Remove a scheduled reminder by its ID.
Fetch all document attachments uploaded to a lead.
{ "message": "Success", "files": [ { "id": 4, "file_name": "contract.pdf", "filetype": "application/pdf" } ] }
Upload a document/attachment for a lead (size capped at 2MB).
| Field | Type | Required | Description |
|---|---|---|---|
| file | File | Yes | Allowed mime types: png, jpg, jpeg, docx, doc, xls, xlsx, zip, rar, txt, pdf (max 2048 KB). |
Delete a lead's document file from physical storage and DB by its ID.
Convert an active lead into a validated client and create a matching primary contact.
{ "message": "Success" }
Sales Cloud: Tickets
Complete ticketing endpoints for resolving user and customer support issues, managing department categories, tracking status, and assigning staff members.
Retrieve detailed columns of a single support ticket by ID.
{ "id": 1, "subject": "App Login Issue", "department": "IT Support", "status": 1, "message": "...", "ticketkey": "..." }
Get all customer/staff support tickets created by a specific User ID.
{ "status": true, "tickets": [] }
Search support tickets where subject or description matches a keyword.
{ "tickets": [] }
Open a new support ticket (auto-assigns a unique tracking hash like Perfex).
{ "subject": "App Login Issue", "department": "IT Support", "contactid": 1, "userid": 1, "message": "Cannot log into mobile dashboard", "assigned": 2, "priority": 1 }
{ "status": true, "message": "Ticket add successful.", "ticket": {} }
Edit/update ticket attributes by route parameter.
{ "status": 2, "assigned": 3 }
{ "status": true, "message": "Ticket Update Successful." }
Permanently delete a support ticket.
{ "status": true, "message": "Ticket Delete Successful." }
Sales Cloud: Activity Logs
Access audit logs and user activity feeds, proxied directly from the ERP platform logging microservice.
Proxies queries to the ERP platform logging microservice
(https://erp.havosoft.com/api/activitylog).
| Parameter | Type | Required | Description |
|---|---|---|---|
| type | string | No | Log filter type, e.g. "deals" or "leads". |
| limit | integer | No | Number of logs to return (default 50). |
| offset | integer | No | Pagination offset index (default 0). |
Sales Cloud: Customer Management
Endpoints to manage client companies, map secondary sub-contacts, perform internationalized phone validations, and conduct third-party KYC checks via Oystr Finance.
Get all customer profiles where the logged-in agent is the account creator.
{ "message": "success", "clients": [ { "userid": 15, "firstname": "Dave", "lastname": "Peters", "company": "Dave Retail Ltd", "email": "dave@peters.com", "phonenumber": "+2348011223344", "city": "Ikeja", "state": "Lagos", "country": "Nigeria" } ] }
Retrieve sub-contacts linked under a main customer account.
{ "message": "success", "contacts": [ { "id": 1, "is_primary": 1, "firstname": "Dave", "lastname": "Peters" } ] }
Perform financial/KYC identity checks (BVN or other indices) using the third-party Oystr Finance API.
{ "number": "22223333444", "type": "bvn" }
{ "firstname": "DAVID", "lastname": "PETERS", "middlename": "OLU", "phone": "08011223344", "address": "12 Allen Avenue, Ikeja", "image": "/9j/4AAQSkZJRgABAQ..." }
Register a new client company and primary contact, enforcing 10-digit internationalized Nigerian phone validation.
{ "firstname": "Dave", "lastname": "Peters", "country": 1, "phonenumber": "08011223344", "company": "Dave Retail Ltd", "email": "dave@peters.com" }
{ "message": "Success" }
Sales Cloud: Whistleblowing / Reports
Anonymous or signed reporting platform to flag workplace misconduct. Features multipart document uploads (capped at 2MB).
List anonymous or signed staff reports filed by the active staff member.
{ "message": "success", "whistles": [ { "title": "Misconduct", "body": "...", "status": "pending", "firstname": "Admin", "lastname": "User" } ] }
Submit a whistleblowing incident with file proof upload (Capped at 2MB).
| Field | Type | Required | Description |
|---|---|---|---|
| staffid | numeric | Yes | Target staff member being reported. |
| title | string | Yes | Brief summary of the incident. |
| body | string | Yes | Detailed incident narration. |
| date | date string | Yes | Incident occurrence date. |
| file | File | Yes | Document proof (png, jpg, jpeg, docx, doc, xls, xlsx, zip, rar, txt, pdf) max 2048 KB. |
Sales Cloud: Products & Categories
Retrieve system catalog goods, license templates, categorizations, and item rates.
Get all product categorizations.
{ "message": "success", "categories": [ { "groupid": 2, "name": "Software Licences" } ] }
Fetch all goods/products belonging to a specific category ID.
{ "message": "success", "products": [ { "articleid": 1, "description": "Sales ERP License", "rate": 500.00 } ] }
Sales Cloud: Announcements
Broadcast system news and corporate bulletins published to the directory in the past 90 days.
Fetch bulletin board postings broadcasted to staff in the last quarter (with HTML strip-tags applied).
{ "message": "success", "announcements": [ { "announcementid": 1, "name": "Annual General Meeting", "message": "The meeting is scheduled for...", "dateadded": "2026-05-19" } ] }
Sales Cloud: Home & Dashboard
Load indicators, summary numbers (leads, deals, clients, colleagues, items), goals, notifications, and individual performance charts.
Consolidate main summary counts (Active leads, Clients, Staff, Products, Deals), staff announcements, reminders, and sales goals progress for dashboard load.
{ "leads": 12, "deals": 5, "clients": 8, "staff": 40, "products": 105, "fname": "John", "lname": "Doe", "id": 1, "performance": 3, "image": "profile.jpg", "announcements": [], "reminders": [], "goals": [] }
Get single sales target progress metric chart data.
{ "message": "success", "performance": 4 }
Sales Cloud: Staff Directory & Profile
Change and set user passwords, retrieve user profile metadata, update attributes, and query the colleague directory.
Set a new password using OTP authorization verification.
{ "password": "newsecretpassword", "password_confirmation": "newsecretpassword", "otp": "1234" }
{ "message": "Password reset successfully" }
Change user password from the profile page.
{ "old": "currentpassword", "password": "newsecretpassword", "password_confirmation": "newsecretpassword" }
{ "message": "Success" }
Fetch profile credentials of the logged-in staff member.
{ "message": "Success", "user": { "staffid": 1, "email": "staff@example.com", "firstname": "John", "lastname": "Doe" } }
Update profile details selectively using attribute indices (e.g. 1 => First Name, 2 => Last Name, 4 => Phone Number, 5 => Facebook Link, 6 => LinkedIn Link, 7 => Skype Handle).
{ "index": 1, "text": "John" }
{ "message": "Success", "user": {} }
List all active colleague profiles and roles.
{ "message": "Success", "staff": [ { "staffid": 2, "firstname": "Sarah", "lastname": "Connor", "role": "Supervisor" } ] }
Search members of the staff directory by first name or last name.
{ "query": "Sarah" }
{ "message": "Success", "staff": [] }
NIN & Identity Verification
Identity validation and search services utilizing the official NIMC database. Verify person identity using national identity numbers or registered mobile phone numbers.
https://meta.collaboratoor.com/meta/public/api
Verify phone numbers using Nigerian fintech bank accounts. Accepts single or bulk comma-separated phone numbers and searches for matching account names.
| Parameter | Type | Required | Description |
|---|---|---|---|
| phones | string | Yes | Single 11-digit phone number or comma-separated numbers (e.g.
08051057322,08123456789). |
{ "status": "success", "data": [ { "phone": "08051057322", "result": { "account_name": "Adebayo Johnson Solomon", "status": "found" } } ] }
{ "status": "error", "message": "Please provide one or more phone numbers." }
Verify a citizen's NIN profile details by supplying their registered phone number. Uses internal headers and Bearer auth.
{ "phone": "08012345678" }
{ "status": "success", "data": { "firstname": "Adebayo", "lastname": "Solomon", "nin": "12345678901" } }
{ "status": "error", "message": "Please provide a phone number." }
{ "error": "Insufficient wallet balance" }
Verify multiple NIN records simultaneously by providing an array of registered phone numbers.
{ "phones": [ "08012345678" "pauseMs": 0 }
{ "status": "success", "data": [ { "phone": "08012345678", "source": "cache", "status": "success", "data": { "firstname": "Adebayo" } ] }
Verify a citizen's NIMC identity parameters directly using their 11-digit NIN.
{ "nin": "12345678901" }
{ "status": "success", "data": { "firstname": "Sarah", "lastname": "Connor" } }
Verify multiple direct NINs in a single request. PauseMs sets processing sleep increments between requests.
{ "nins": [ "12345678901" "pauseMs": 0 }
{ "status": "success", "data": [ { "nin": "12345678901", "source": "cache", "status": "success", "data": { "firstname": "Sarah" } } ] }
CDR Search & Reporting
API endpoints for the Call Detail Record (CDR) search and forensics reporting system. These enable submission of query phone numbers and checking processing statuses.
https://cdranalysis.collaboratoor.com
Submits a target phone number for CDR forensic retrieval. Once submitted, system administrators will be notified to gather and fulfill the data.
{ "phone_number": "2348037866054" }
{ "request_id": 1, "phone_number": "2348037866054", "status": "pending", "created_at": "2026-05-19T12:20:43.719Z", "updated_at": "2026-05-19T12:20:43.719Z", "records": [ { "called_number": "2348037866054", "calling_number": "2347037365636", "total_calls": 88 ] }
{ "message": "Unauthenticated." }
Retrieves the search status and full call logs of a CDR request. If the status is 'completed', the returned body includes all parsed CDR log records.
| Parameter | Type | Required | Description |
|---|---|---|---|
| id | integer | Yes | Unique ID of the submitted search request. |
{ "request_id": 1, "phone_number": "2348037866054", "status": "completed", "created_at": "2026-05-19T12:20:43.717Z", "updated_at": "2026-05-19T12:20:43.717Z", "records": [ { "called_number": "2348037866054", "calling_number": "2347037365636", "total_calls": 88 ] }
{ "error": "Request not found" }