Skip to main content

Admin Clients API Endpoints

The Clients API provides endpoints for managing client profiles including creation, updates, advanced search, bulk operations, dashboard analytics, and comprehensive statistics. Clients represent end-user profiles linked to authentication accounts. All endpoints require admin authentication.

Base Path

/api/admin/clients

Route Summary

MethodPathAuthDescription
GET/api/admin/clientsAdminGet paginated clients list
POST/api/admin/clientsAdminCreate a new client profile
GET/api/admin/clients/statsAdminGet comprehensive client statistics
GET/api/admin/clients/dashboardAdminGet combined dashboard data
GET/api/admin/clients/advanced-searchAdminAdvanced multi-filter search
PUT/api/admin/clients/bulkAdminBulk update client profiles
DELETE/api/admin/clients/bulkAdminBulk delete client profiles
GET/api/admin/clients/{clientId}AdminGet client by ID
PUT/api/admin/clients/{clientId}AdminUpdate client profile
DELETE/api/admin/clients/{clientId}AdminDelete client profile

List Clients

GET /api/admin/clients

Returns a paginated list of client profiles with basic filtering.

Query Parameters:

ParameterTypeDefaultDescription
pageinteger1Page number (minimum: 1)
limitinteger10Results per page (1--100)
searchstring--Search by name or email
statusstring--Filter: active, inactive, suspended, trial
planstring--Filter: free, standard, premium
accountTypestring--Filter: individual, business, enterprise
providerstring--Filter by authentication provider

Response (200):

{
"success": true,
"data": {
"clients": [
{
"id": "client_123abc",
"displayName": "John Doe",
"username": "johndoe",
"email": "john.doe@example.com",
"company": "Tech Corp Inc",
"status": "active",
"plan": "premium",
"accountType": "business",
"joinedAt": "2024-01-15T10:30:00.000Z",
"lastActiveAt": "2024-01-20T14:45:00.000Z"
}
]
},
"meta": {
"page": 1,
"totalPages": 5,
"total": 47,
"limit": 10
}
}

Create Client

POST /api/admin/clients

Creates a new client profile. If no user account exists for the provided email, a new user is automatically created with a temporary password. Triggers CRM sync when enabled.

Request Body:

FieldTypeRequiredDescription
emailstringYesClient email address
displayNamestringNoDisplay name (defaults to email prefix)
usernamestringNoUnique username
biostringNoClient biography
jobTitlestringNoJob title
companystringNoCompany name
industrystringNoIndustry sector
phonestringNoPhone number
websitestringNoWebsite URL
locationstringNoLocation
accountTypestringNoindividual (default), business, enterprise
statusstringNoactive (default), inactive, suspended, trial
planstringNofree (default), standard, premium

Response (200):

{
"success": true,
"data": {
"id": "client_789ghi",
"displayName": "John Doe",
"email": "john.doe@example.com",
"status": "active",
"plan": "premium",
"accountType": "business",
"createdAt": "2024-01-20T16:45:00.000Z"
},
"message": "Client created successfully"
}

Get Client Statistics

GET /api/admin/clients/stats

Returns comprehensive analytics across all clients, grouped by overview, growth, plans, account types, engagement, demographics, and authentication providers.

Response (200):

{
"success": true,
"data": {
"overview": {
"totalClients": 1247,
"activeClients": 1156,
"inactiveClients": 67,
"suspendedClients": 24,
"trialClients": 89
},
"growth": {
"newClientsToday": 3,
"newClientsThisWeek": 18,
"newClientsThisMonth": 45,
"growthRate": 3.8
},
"plans": {
"free": 856,
"standard": 267,
"premium": 124,
"conversionRate": 31.4
},
"accountTypes": {
"individual": 789,
"business": 356,
"enterprise": 102
},
"engagement": {
"averageSubmissions": 12.5,
"totalSubmissions": 15587,
"activeThisWeek": 892,
"activeThisMonth": 1034
},
"demographics": {
"topCountries": [{ "country": "United States", "count": 456 }],
"topCompanies": [{ "company": "Tech Corp Inc", "count": 25 }],
"topIndustries": [{ "industry": "Technology", "count": 234 }]
},
"providers": { "google": 567, "github": 234, "email": 446 }
}
}

Dashboard

GET /api/admin/clients/dashboard

Returns a combined response with a paginated clients list, aggregate statistics, and pagination metadata. Supports all basic filters plus date range parameters.

Query Parameters (in addition to list parameters):

ParameterTypeDescription
createdAfterstringISO date or YYYY-MM-DD -- created after
createdBeforestringISO date or YYYY-MM-DD -- created before

GET /api/admin/clients/advanced-search

Performs a multi-dimensional search across client profiles. In addition to the basic list filters, supports field-specific searches, numeric ranges, boolean flags, and date ranges. Returns search metadata including applied filters and execution time.

Additional Query Parameters:

ParameterTypeDescription
sortBystringcreatedAt, updatedAt, name, email, company, totalSubmissions
sortOrderstringasc or desc
createdAfterstringISO date-time filter
createdBeforestringISO date-time filter
emailDomainstringFilter by email domain (e.g., example.com)
companySearchstringSearch within company names
locationSearchstringSearch within locations
industrySearchstringSearch within industries
minSubmissionsintegerMinimum submission count
maxSubmissionsintegerMaximum submission count
emailVerifiedbooleanFilter by email verification status
twoFactorEnabledbooleanFilter by 2FA status
hasAvatarbooleanFilter clients with/without avatar
hasWebsitebooleanFilter clients with/without website
hasPhonebooleanFilter clients with/without phone

Response (200):

{
"success": true,
"data": {
"clients": [{ "id": "client_123abc", "..." : "..." }],
"pagination": { "page": 1, "limit": 20, "total": 15, "totalPages": 1 },
"searchMetadata": {
"appliedFilters": { "status": "active", "plan": "premium" },
"searchTime": 45.2
}
}
}

Bulk Operations

Bulk Update

PUT /api/admin/clients/bulk

Updates multiple client profiles in a single request. Each client object must include an id field plus the fields to update. Individual failures do not abort the entire batch.

Request Body:

{
"clients": [
{ "id": "client_123abc", "plan": "premium", "status": "active" },
{ "id": "client_456def", "plan": "standard" }
]
}

Bulk Delete

DELETE /api/admin/clients/bulk

Permanently deletes multiple client profiles. Each object in the array must include an id field.

Request Body:

{
"clients": [
{ "id": "client_123abc" },
{ "id": "client_456def" }
]
}

Response (200) -- both bulk endpoints:

{
"success": true,
"message": "Bulk update completed: 2 successful, 1 failed",
"results": [{ "index": 0, "success": true }],
"errors": [{ "index": 2, "error": "Client not found" }],
"summary": { "total": 3, "successful": 2, "failed": 1 }
}

Get / Update / Delete Client

Get Client

GET /api/admin/clients/{clientId}

Returns the complete client profile including display name, company, plan, account type, and activity timestamps.

Update Client

PUT /api/admin/clients/{clientId}

Partial update -- only provided fields are modified. Triggers CRM sync when company or profile data changes.

Request Body (all fields optional):

{
"displayName": "John Doe Updated",
"username": "johndoe_updated",
"bio": "Senior Developer",
"jobTitle": "Lead Developer",
"company": "Tech Corp Inc",
"status": "active",
"plan": "premium",
"accountType": "business"
}

Delete Client

DELETE /api/admin/clients/{clientId}

Permanently deletes a client profile. This action cannot be undone.

Response (200):

{ "success": true, "message": "Client deleted successfully" }

Validation Rules

FieldRule
emailRequired for creation; valid email format
statusMust be active, inactive, suspended, or trial
planMust be free, standard, or premium
accountTypeMust be individual, business, or enterprise
clientsBulk: non-empty array with id required on each object

Error Codes

StatusMeaning
400Validation error, missing email, user creation failed
401Authentication required
403Admin privileges required
404Client not found
500Internal server error