Create Company API (With Dynamic Employee Bands & Simultaneous Company Admin)
Overview
Onboards a new corporate client / company, dynamically creates custom Employee Bands from the payload (or default Band 1 if omitted), and simultaneously creates the company's primary Company Admin user in a single atomic transaction.
- Endpoint:
/api/companies/create - Method:
POST - Access: Super Admin / Platform RM
Request Body Schema
| Field | Type | Required | Description |
|---|---|---|---|
name | String | Yes | Display name of the company |
legalName | String | No | Registered legal entity name |
gstin | String | No | 15-digit GST identification number |
gstType | Enum | No | REGULAR, COMPOSITION, or UNREGISTERED |
panNumber | String | No | 10-digit Permanent Account Number |
address | String | No | Full office address |
pincode | String | No | Area pincode |
phone | String | No | Contact phone number |
emailId | String | No | Official corporate contact email |
creditLimit | Number | No | Total credit limit granted (Default: 500000.00) |
creditDays | Number | No | Payment credit period in days (Default: 15) |
employeeBands | Array | No | Dynamic list of employee bands to create for company |
adminUser | Object | No | Primary Company Admin user details |
employeeBands Item Schema
| Field | Type | Required | Description |
|---|---|---|---|
name | String | Yes | Band name (e.g. "Band 1", "Band 2", "L1") |
code | String | No | Optional band code (e.g. "B1", "L1") |
description | String | No | Description |
autoApprovalLimit | Number | No | Auto approval limit (Default: 7000.00) |
maxBookingLimit | Number | No | Max booking limit per trip |
adminUser Object Schema
| Field | Type | Required | Description |
|---|---|---|---|
firstName | String | Yes | Admin first name |
lastName | String | No | Admin last name |
email | String | Yes | Admin email address |
password | String | No | Admin password (Default: "Password123!") |
phone | String | No | Admin phone number |
Request Body Example (Dynamic Employee Bands)
{
"name": "Abbott Healthcare",
"legalName": "Abbott Healthcare India Private Limited",
"gstin": "27AAACA0000A1Z5",
"creditLimit": 1000000,
"creditDays": 30,
"employeeBands": [
{
"name": "Band 1",
"code": "B1",
"autoApprovalLimit": 7000.00,
"maxBookingLimit": 25000.00
},
{
"name": "Band 2",
"code": "B2",
"autoApprovalLimit": 15000.00,
"maxBookingLimit": 50000.00
}
],
"adminUser": {
"firstName": "Anita",
"lastName": "Iyer",
"email": "admin@abbott.com",
"password": "Password123!",
"phone": "+919876543210"
}
}
Success Response (201 Created)
{
"success": true,
"message": "Company onboarded successfully",
"data": {
"company": {
"id": "c478a846-993d-4c8d-bf8d-d77cb3370e01",
"name": "Abbott Healthcare",
"legalName": "Abbott Healthcare India Private Limited",
"gstin": "27AAACA0000A1Z5",
"creditLimit": "1000000.00",
"creditDays": 30,
"active": true,
"employeeBands": [
{
"id": "b123-uuid",
"name": "Band 1",
"code": "B1",
"autoApprovalLimit": "7000.00"
},
{
"id": "b124-uuid",
"name": "Band 2",
"code": "B2",
"autoApprovalLimit": "15000.00"
}
]
},
"adminUser": {
"id": "u555-admin-uuid",
"email": "admin@abbott.com",
"firstName": "Anita",
"lastName": "Iyer",
"companyId": "c478a846-993d-4c8d-bf8d-d77cb3370e01",
"employeeBand": "Band 1"
}
}
}
Database Impact
- Tables:
companies,employee_bands,users,user_role_maps - Operations: Atomic Prisma transaction creating
Company, dynamicEmployeeBandentries, andUser(Company Admin) with role mapping lookup.