Skip to main content

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

FieldTypeRequiredDescription
nameStringYesDisplay name of the company
legalNameStringNoRegistered legal entity name
gstinStringNo15-digit GST identification number
gstTypeEnumNoREGULAR, COMPOSITION, or UNREGISTERED
panNumberStringNo10-digit Permanent Account Number
addressStringNoFull office address
pincodeStringNoArea pincode
phoneStringNoContact phone number
emailIdStringNoOfficial corporate contact email
creditLimitNumberNoTotal credit limit granted (Default: 500000.00)
creditDaysNumberNoPayment credit period in days (Default: 15)
employeeBandsArrayNoDynamic list of employee bands to create for company
adminUserObjectNoPrimary Company Admin user details

employeeBands Item Schema

FieldTypeRequiredDescription
nameStringYesBand name (e.g. "Band 1", "Band 2", "L1")
codeStringNoOptional band code (e.g. "B1", "L1")
descriptionStringNoDescription
autoApprovalLimitNumberNoAuto approval limit (Default: 7000.00)
maxBookingLimitNumberNoMax booking limit per trip

adminUser Object Schema

FieldTypeRequiredDescription
firstNameStringYesAdmin first name
lastNameStringNoAdmin last name
emailStringYesAdmin email address
passwordStringNoAdmin password (Default: "Password123!")
phoneStringNoAdmin 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, dynamic EmployeeBand entries, and User (Company Admin) with role mapping lookup.