Files
Krow-workspace/docs/API_documentation.md
bwnyasse 866d0df45c feat(docs): add MAINTENANCE_GUIDE.md to describe the process of updating the API documentation and specification
feat(docs): update API_documentation.md with comprehensive API specifications for all entities, SDK methods, and integration endpoints
feat(docs): update api_specification.md to align with the updated API documentation and guide the development of the new backend
2025-11-11 06:57:58 -05:00

80 KiB

KROW Workforce Platform - API Documentation

Version: 2.0 Last Updated: 2025-11-11 Project: KROW Workforce Control Tower

Table of Contents

  1. Overview
  2. Authentication
  3. Entity Schemas
  4. SDK Operations
  5. Core Integrations
  6. Data Models Reference
  7. Code Examples
  8. Best Practices
  9. Security Considerations
  10. Rate Limits & Quotas
  11. Changelog
  12. Support & Resources

Overview

KROW Workforce is a comprehensive workforce management platform built on Base44. This documentation provides complete API specifications for all entities, SDK methods, and integration endpoints.

Base44 Client Import

import { base44 } from "@/api/base44Client";

Authentication

User Authentication Methods

// Get current authenticated user
const user = await base44.auth.me();

// Update current user
await base44.auth.updateMe({
  full_name: "John Doe",
  custom_field: "value"
});

// Logout
base44.auth.logout(redirectUrl?: string);

// Redirect to login
base44.auth.redirectToLogin(nextUrl?: string);

// Check authentication status
const isAuthenticated = await base44.auth.isAuthenticated();

User Object Structure

{
  "id": "string",
  "email": "string",
  "full_name": "string",
  "role": ""admin" | "user"",
  "user_role": "string", // Custom role field
  "created_date": "timestamp",
  "updated_date": "timestamp",
  // ... custom fields
}

Entity Schemas

1. User Entity (Built-in)

Description: Core user entity with authentication and role management.

Field Name Type Description Validation
id string Unique user identifier Auto-generated, unique
email string User email address Required, unique, email format
full_name string User's full name Required
role string Base role Enum: "admin", "user"
user_role string Custom application role Optional, custom values
created_date timestamp Account creation date Auto-generated
updated_date timestamp Last update timestamp Auto-updated

JSON Schema:

{
  "type": "object",
  "properties": {
    "email": {"type": "string", "format": "email"},
    "full_name": {"type": "string"},
    "role": {"type": "string", "enum": ["admin", "user"]},
    "user_role": {"type": "string"}
  }
}

Security Rules:

  • Only admin users can list, update, or delete other users
  • Regular users can only view and update their own user record
  • These rules are automatically enforced

2. Event Entity

Description: Core event/order management entity for workforce scheduling.

Field Name Type Description Validation
id string Unique event identifier Auto-generated
event_name string Name of the event Required
is_recurring boolean Whether event recurs Default: false
recurrence_type string Type of recurrence Enum: "single", "date_range", "scatter"
recurrence_start_date date Start date for recurring events Optional
recurrence_end_date date End date for recurring events Optional
scatter_dates array Specific dates for scatter recurring Array of date strings
business_id string Associated business ID Optional
business_name string Business name Optional
vendor_id string Vendor ID if created by vendor Optional
vendor_name string Vendor name Optional
hub string Hub location Optional
contract_type string Contract type Enum: "W2", "1099", "Temp", "Contract"
po_reference string Purchase order reference Optional
status string Event status Enum: "Draft", "Active", "Pending", "Assigned", "Confirmed", "Completed", "Canceled"
date date Event date Optional
shifts array Array of shift objects Optional
addons object Additional services/features Optional
total number Total cost Optional
client_name string Client contact name Optional
client_email string Client email Optional
client_phone string Client phone Optional
notes string Additional notes Optional
requested number Total staff requested Optional
assigned_staff array Array of assigned staff Optional
created_date timestamp Creation date Auto-generated
updated_date timestamp Last update Auto-updated
created_by string Creator email Auto-populated

Shifts Structure:

{
  "shift_name": "string",
  "shift_contact": "string",
  "location_address": "string",
  "roles": [
    {
      "role": "string",
      "department": "string",
      "count": "number",
      "start_time": "string",
      "end_time": "string",
      "hours": "number",
      "uniform": "string",
      "break_minutes": "number",
      "cost_per_hour": "number",
      "total_value": "number",
      "vendor_name": "string",
      "vendor_id": "string"
    }
  ]
}

3. Staff Entity

Description: Employee/workforce member management.

Field Name Type Description Validation
id string Unique staff identifier Auto-generated
employee_name string Full name Required
vendor_id string Associated vendor ID Optional
vendor_name string Vendor company name Optional
manager string Manager's name Optional
contact_number string Primary contact number Optional
phone string Additional phone Optional
email string Email address Email format
department string Department Enum: "Operations", "Sales", "HR", "Finance", "IT", "Marketing", "Customer Service", "Logistics"
hub_location string Hub/office location Optional
event_location string Event location Optional
address string Employee address Optional
city string City Optional
position string Primary job position/skill Optional
position_2 string Secondary job position/skill Optional
profile_type string Skill profile level Enum: "Skilled", "Beginner", "Cross-Trained"
employment_type string Employment type Enum: "Full Time", "Part Time", "On call", "Weekends", "Specific Days", "Seasonal", "Medical Leave"
english string English proficiency Enum: "Fluent", "Intermediate", "Basic", "None"
english_required boolean English required Optional
rating number Performance rating Min: 0, Max: 5
shift_coverage_percentage number Shift coverage % Min: 0, Max: 100
cancellation_count number Number of cancellations Min: 0
no_show_count number Number of no-shows Min: 0
total_shifts number Total shifts assigned Min: 0
reliability_score number Reliability score Min: 0, Max: 100
background_check_status string Background check status Enum: "pending", "cleared", "failed", "expired", "not_required"
background_check_date date Last background check date Optional
certifications array List of certifications Optional
created_date timestamp Creation date Auto-generated
updated_date timestamp Last update Auto-updated
created_by string Creator email Auto-populated

4. Vendor Entity

Description: Vendor/supplier management and onboarding.

Field Name Type Description Validation
id string Unique vendor identifier Auto-generated
vendor_number string Vendor Number (VN-####) Required, Pattern: ^VN-[0-9]{4}$
legal_name string Legal business name Required
doing_business_as string DBA/Trade name Optional
region string Geographic region Enum: "National", "Bay Area", "Southern California", "Northern California", "West", "East", "Midwest", "South"
state string Primary state Optional
city string Primary city Optional
service_specialty string Service specialty Optional
workforce_count number Total workforce count Optional
platform_type string Technology integration level Enum: "Full Platform", "Building platform (KROW)", "Partial Tech", "Traditional"
tax_id string Federal Tax ID/EIN Optional
business_type string Business entity type Enum: "Corporation", "LLC", "Partnership", "Sole Proprietorship"
primary_contact_name string Primary contact Optional
primary_contact_email string Primary email Required, Email format
primary_contact_phone string Primary phone Optional
billing_address string Billing address Optional
service_address string Service/office address Optional
coverage_regions array Geographic coverage Array of strings
eligible_roles array Roles/positions provided Array of strings
insurance_certificate string URL to insurance cert Optional
insurance_expiry date Insurance expiration Optional
w9_document string URL to W9 form Optional
coi_document string URL to COI Optional
approval_status string Vendor approval status Enum: "pending", "approved", "suspended", "terminated"
approved_date date Approval date Optional
approved_by string Approver Optional
is_active boolean Active status Default: true
notes string Internal notes Optional
created_date timestamp Creation date Auto-generated
updated_date timestamp Last update Auto-updated

5. VendorRate Entity

Description: Vendor pricing and rate management.

Field Name Type Description Validation
id string Unique rate identifier Auto-generated
vendor_id string Vendor ID Optional
vendor_name string Vendor name Required
category string Service category Enum: "Kitchen and Culinary", "Concessions", "Facilities", "Bartending", "Security", "Event Staff", "Management", "Technical", "Other"
role_name string Role/position name Required
employee_wage number Employee base wage/hour Required, Min: 0
markup_percentage number Markup percentage Min: 0, Max: 100
vendor_fee_percentage number Vendor fee percentage Min: 0, Max: 100
client_rate number Final rate to client Required, Min: 0
is_active boolean Active status Default: true
minimum_wage_compliance boolean Meets minimum wage Optional
pricing_status string Pricing analysis Enum: "optimal", "underpriced", "overpriced", "competitive"
market_average number Market average rate Optional
notes string Additional notes Optional
available_to_clients array Client IDs with access Array of strings
client_visibility string Visibility setting Enum: "all", "specific", "none"
competitive_status boolean Competitive pricing Default: false
csta_compliant boolean CA Staffing Agency compliant Default: false
compliance_verified boolean Compliance verified Default: false
created_date timestamp Creation date Auto-generated
updated_date timestamp Last update Auto-updated

6. Invoice Entity

Description: Invoice and billing management.

Field Name Type Description Validation
id string Unique invoice identifier Auto-generated
invoice_number string Unique invoice number Required
manager_name string Manager/client name Optional
hub string Hub location Optional
cost_center string Cost center/department Optional
event_id string Related event ID Optional
event_name string Event name Optional
business_name string Client/Business name Required
vendor_name string Vendor name Optional
amount number Invoice amount Required, Min: 0
item_count number Number of items Min: 0
status string Invoice status Enum: "Open", "Disputed", "Resolved", "Verified", "Overdue", "Reconciled", "Paid", "Confirmed", "Pending"
issue_date date Invoice issue date Required
due_date date Payment due date Required
paid_date date Payment received date Optional
payment_method string Payment method Enum: "Credit Card", "ACH", "Wire Transfer", "Check", "Cash"
notes string Additional notes Optional
created_date timestamp Creation date Auto-generated
updated_date timestamp Last update Auto-updated

7. Business Entity

Description: Client business/company management.

Field Name Type Description Validation
id string Unique business identifier Auto-generated
business_name string Business/client company name Required
company_logo string URL to company logo Optional
contact_name string Primary contact person Required
email string Business email Email format
phone string Business phone Optional
hub_building string Hub/building name Optional
address string Street address Optional
city string City Optional
area string Geographic area Enum: "Bay Area", "Southern California", "Northern California", "Central Valley", "Other"
sector string Sector/industry Enum: "Bon Appétit", "Eurest", "Aramark", "Epicurean Group", "Chartwells", "Other"
rate_group string Pricing tier Required, Enum: "Standard", "Premium", "Enterprise", "Custom"
status string Business status Enum: "Active", "Inactive", "Pending"
notes string Additional notes Optional
created_date timestamp Creation date Auto-generated
updated_date timestamp Last update Auto-updated

8. Certification Entity

Description: Employee certification and compliance tracking.

Field Name Type Description Validation
id string Unique certification ID Auto-generated
employee_id string Staff member ID Optional
employee_name string Staff member name Required
vendor_id string Vendor ID Optional
vendor_name string Vendor name Optional
certification_name string Certification name Required
certification_type string Type of certification Enum: "Legal", "Operational", "Safety", "Training", "License", "Other"
status string Current status Enum: "current", "expiring_soon", "expired", "pending_validation"
issue_date date Issue date Optional
expiry_date date Expiration date Required
issuer string Issuing authority Optional
certificate_number string Certificate ID Optional
document_url string Uploaded certificate URL Optional
validation_status string Validation status Enum: "approved", "pending_expert_review", "rejected", "ai_verified", "ai_flagged", "manual_review_needed"
ai_validation_result object AI validation results Optional
validated_by string Validator Optional
validated_date date Validation date Optional
is_required_for_role boolean Required for role Default: false
days_until_expiry number Auto-calculated days Optional
alert_sent boolean Expiry alert sent Default: false
notes string Additional notes Optional
created_date timestamp Creation date Auto-generated
updated_date timestamp Last update Auto-updated

9. Team Entity

Description: Team and organization management.

Field Name Type Description Validation
id string Unique team identifier Auto-generated
team_name string Name of the team Required
owner_id string Team owner user ID Required
owner_name string Team owner name Required
owner_role string Role of team owner Required, Enum: "admin", "procurement", "operator", "sector", "client", "vendor", "workforce"
company_logo string URL to company logo Optional
full_name string Primary contact name Optional
email string Contact email Email format
phone string Contact phone Optional
address string Company address Optional
city string City Optional
zip_code string ZIP code Optional
vendor_id string Vendor ID if applicable Optional
departments array Available departments Array of strings
total_members number Total team members Default: 0
active_members number Active members Default: 0
total_hubs number Total hubs Default: 0
favorite_staff_count number Favorite staff count Default: 0
blocked_staff_count number Blocked staff count Default: 0
created_date timestamp Creation date Auto-generated
updated_date timestamp Last update Auto-updated

10. Conversation Entity

Description: Messaging and communication management.

Field Name Type Description Validation
id string Unique conversation ID Auto-generated
participants array Array of participant objects Required
conversation_type string Type of conversation Required, Enum: "client-vendor", "staff-client", "staff-admin", "vendor-admin", "client-admin", "group-staff", "group-event-staff"
is_group boolean Is group conversation Default: false
group_name string Group name Optional
related_to string Related entity ID Optional
related_type string Related entity type Enum: "event", "staff", "business", "general"
subject string Conversation subject Optional
last_message string Preview of last message Optional
last_message_at timestamp Last message timestamp Optional
unread_count number Unread message count Default: 0
status string Conversation status Enum: "active", "archived", "closed"
created_date timestamp Creation date Auto-generated
updated_date timestamp Last update Auto-updated

11. Message Entity

Description: Individual messages within conversations.

Field Name Type Description Validation
id string Unique message identifier Auto-generated
conversation_id string Conversation ID Required
sender_id string Sender ID Optional
sender_name string Sender name Required
sender_role string Sender role Enum: "client", "vendor", "staff", "admin"
content string Message content Required
read_by array User IDs who read Array of strings
attachments array Attached files Array of objects
created_date timestamp Creation date Auto-generated
updated_date timestamp Last update Auto-updated

12. ActivityLog Entity

Description: Activity and notification tracking.

Field Name Type Description Validation
id string Unique activity identifier Auto-generated
title string Notification title Required
description string Detailed description Required
activity_type string Type of activity Required, Enum: "event_created", "event_updated", "event_rescheduled", "event_canceled", "staff_assigned", "staff_removed", "invoice_paid", "invoice_created", "message_received", "order_created", "order_updated"
related_entity_type string Related entity type Enum: "event", "staff", "invoice", "message", "order", "user"
related_entity_id string Related entity ID Optional
action_link string Link to related item Optional
action_label string Action button label Optional
user_id string User this is for Required
is_read boolean Read status Default: false
icon_type string Icon to display Enum: "calendar", "user", "invoice", "message", "alert", "check"
icon_color string Icon color theme Enum: "blue", "red", "green", "yellow", "purple"
created_date timestamp Creation date Auto-generated
updated_date timestamp Last update Auto-updated

13. Enterprise Entity

Description: Enterprise organization management.

Field Name Type Description Validation
id string Unique enterprise ID Auto-generated
enterprise_number string Enterprise Number (EN-####) Required, Pattern: ^EN-[0-9]{4}$
enterprise_name string Enterprise name Required
enterprise_code string Short code identifier Required
brand_family array Brands under enterprise Array of strings
headquarters_address string HQ address Optional
global_policies object Global policies Optional
sector_registry array Sector IDs Array of strings
rate_guardrails object Rate limits Optional
primary_contact_name string Contact name Optional
primary_contact_email string Contact email Email format
is_active boolean Active status Default: true
created_date timestamp Creation date Auto-generated
updated_date timestamp Last update Auto-updated

14. Sector Entity

Description: Sector/branch management.

Field Name Type Description Validation
id string Unique sector identifier Auto-generated
sector_number string Sector Number (SN-####) Required, Pattern: ^SN-[0-9]{4}$
sector_name string Sector/brand name Required
sector_code string Short code identifier Required
parent_enterprise_id string Parent enterprise ID Optional
parent_enterprise_name string Parent enterprise name Optional
sector_type string Sector business type Enum: "Food Service", "Facilities", "Healthcare", "Education", "Corporate", "Sports & Entertainment"
client_portfolio array Partner/client IDs Array of strings
sector_policies object Sector-specific policies Optional
approved_vendors array Approved vendor IDs Array of strings
is_active boolean Active status Default: true
created_date timestamp Creation date Auto-generated
updated_date timestamp Last update Auto-updated

15. Partner Entity

Description: Partner/client organization management.

Field Name Type Description Validation
id string Unique partner identifier Auto-generated
partner_name string Partner/client name Required
partner_number string Partner Number (PN-####) Required, Pattern: ^PN-[0-9]{4}$
partner_type string Partner type Enum: "Corporate", "Education", "Healthcare", "Sports & Entertainment", "Government"
sector_id string Sector ID Optional
sector_name string Sector name Optional
primary_contact_name string Primary contact Optional
primary_contact_email string Primary email Email format
primary_contact_phone string Primary phone Optional
billing_address string Billing address Optional
sites array Partner sites/locations Array of objects
allowed_vendors array Allowed vendor IDs Array of strings
rate_exceptions array Rate exceptions Array of objects
cost_centers array Cost centers/PO numbers Array of strings
payment_terms string Payment terms Default: "Net 30"
is_active boolean Active status Default: true
created_date timestamp Creation date Auto-generated
updated_date timestamp Last update Auto-updated

16. Order Entity

Description: Order management system.

Field Name Type Description Validation
id string Unique order identifier Auto-generated
order_number string Order Number (ORD-####) Required, Pattern: ^ORD-[0-9]{4,6}$
partner_id string Partner/Client ID Required
partner_name string Partner/Client name Optional
site_id string Site/location ID Optional
site_name string Site/location name Optional
site_address string Event/site address Optional
sector_id string Sector ID Optional
enterprise_id string Enterprise ID Optional
order_type string Type of order Enum: "Standard", "Last Minute", "Emergency", "Recurring"
cost_center string Cost center Optional
po_number string Purchase order number Optional
roles_requested array Roles and headcount Array of objects
tags array Order tags/labels Array of strings
point_of_contact object On-site contact Optional
sla_targets object SLA targets Optional
order_status string Order status Enum: "Draft", "Submitted", "Confirmed", "In Progress", "Completed", "Cancelled"
submitted_date timestamp Submission date Optional
confirmed_date timestamp Confirmation date Optional
special_instructions string Special instructions Optional
total_estimated_cost number Estimated total cost Optional
created_date timestamp Creation date Auto-generated
updated_date timestamp Last update Auto-updated

17. Shift Entity

Description: Shift scheduling and management.

Field Name Type Description Validation
id string Unique shift identifier Auto-generated
event_id string Associated event ID Optional
shift_name string Name of the shift Required
manager_id string Manager staff ID Optional
manager_name string Manager name Optional
location string Shift location Optional
start_date timestamp Shift start date/time Required
end_date timestamp Shift end date/time Optional
unpaid_break number Unpaid break in minutes Optional
count number Number of staff needed Optional
assigned number Number of staff assigned Optional
uniform_type string Required uniform type Optional
price number Price per staff member Optional
amount number Total amount for shift Optional
assigned_staff array List of assigned staff Array of objects
role string Role for this shift Optional
department string Department Optional
created_date timestamp Creation date Auto-generated
updated_date timestamp Last update Auto-updated

SDK Operations

Standard Entity Operations

All entities support the following base operations:

List All Records

// List all records (default limit: 50)
const records = await base44.entities.EntityName.list();

// List with sorting (descending by created_date)
const records = await base44.entities.EntityName.list('-created_date');

// List with sorting and limit
const records = await base44.entities.EntityName.list('-created_date', 20);

Filter Records

// Filter by single field
const records = await base44.entities.EntityName.filter({
  status: 'Active'
});

// Filter with multiple conditions
const records = await base44.entities.EntityName.filter({
  status: 'Active',
  created_by: user.email
});

// Filter with sorting and limit
const records = await base44.entities.EntityName.filter(
  { status: 'Active' },
  '-created_date',
  10
);

// Filter with operators
const records = await base44.entities.EntityName.filter({
  rating: { $gte: 4.5 },
  total: { $lte: 1000 }
});

Create Record

// Create single record
const newRecord = await base44.entities.EntityName.create({
  field1: 'value1',
  field2: 'value2'
});

// Returns created record with id

Bulk Create Records

// Create multiple records
const newRecords = await base44.entities.EntityName.bulkCreate([
  { field1: 'value1' },
  { field1: 'value2' },
  { field1: 'value3' }
]);

// Returns array of created records

Update Record

// Update by ID
const updatedRecord = await base44.entities.EntityName.update(recordId, {
  field1: 'new value'
});

// Returns updated record

Delete Record

// Delete by ID
await base44.entities.EntityName.delete(recordId);

Get Entity Schema

// Get JSON schema (without built-in fields)
const schema = await base44.entities.EntityName.schema();

// Useful for dynamic form generation

Entity-Specific Examples

Event Operations

// List recent events
const events = await base44.entities.Event.list('-date', 50);

// Filter vendor's events
const myEvents = await base44.entities.Event.filter({
  vendor_id: user.id,
  status: 'Active'
}, '-date', 20);

// Create new event
const newEvent = await base44.entities.Event.create({
  event_name: 'Corporate Luncheon',
  business_name: 'Acme Corp',
  date: '2025-12-01',
  status: 'Draft',
  requested: 15
});

// Update event status
await base44.entities.Event.update(eventId, {
  status: 'Confirmed'
});

Staff Operations

// List all active staff
const staff = await base44.entities.Staff.list('-created_date');

// Filter by vendor
const vendorStaff = await base44.entities.Staff.filter({
  vendor_id: vendorId
});

// Filter by rating
const topStaff = await base44.entities.Staff.filter({
  rating: { $gte: 4.5 }
}, '-rating', 10);

// Create staff member
const newStaff = await base44.entities.Staff.create({
  employee_name: 'John Doe',
  vendor_name: 'ABC Staffing',
  position: 'Server',
  employment_type: 'Part Time'
});

// Update staff rating
await base44.entities.Staff.update(staffId, {
  rating: 4.8,
  reliability_score: 95
});

Invoice Operations

// List unpaid invoices
const unpaid = await base44.entities.Invoice.filter({
  status: 'Open'
}, '-due_date');

// Get client's invoices
const clientInvoices = await base44.entities.Invoice.filter({
  business_name: clientName
});

// Create invoice
const invoice = await base44.entities.Invoice.create({
  invoice_number: 'INV-2025-001',
  business_name: 'Client Corp',
  amount: 5000,
  status: 'Open',
  issue_date: '2025-01-01',
  due_date: '2025-01-31'
});

// Mark as paid
await base44.entities.Invoice.update(invoiceId, {
  status: 'Paid',
  paid_date: new Date().toISOString()
});

Conversation & Message Operations

// List active conversations
const conversations = await base44.entities.Conversation.filter({
  status: 'active',
  participants: { $contains: userId }
}, '-last_message_at');

// Create conversation
const conversation = await base44.entities.Conversation.create({
  participants: [
    { id: user1Id, name: user1Name, role: 'client' },
    { id: user2Id, name: user2Name, role: 'vendor' }
  ],
  conversation_type: 'client-vendor',
  subject: 'Event #123 Discussion',
  status: 'active'
});

// Send message
const message = await base44.entities.Message.create({
  conversation_id: conversationId,
  sender_id: userId,
  sender_name: userName,
  sender_role: 'client',
  content: 'Hello, can we discuss the event details?'
});

// Mark as read
await base44.entities.Message.update(messageId, {
  read_by: [...existingReadBy, userId]
});

Core Integrations

Integration: InvokeLLM

Description: Generate responses from an LLM with optional web context or file attachments.

Parameter Type Required Description
prompt string Yes The prompt to send to the LLM
add_context_from_internet boolean No Fetch context from Google Search, Maps, News (default: false)
response_json_schema object No JSON schema for structured output
file_urls string[] No Array of file URLs for additional context

Returns:

  • If response_json_schema specified: object (parsed JSON)
  • Otherwise: string

Examples:

// Simple text response
const response = await base44.integrations.Core.InvokeLLM({
  prompt: "Summarize the top 3 benefits of workforce automation"
});

// Structured JSON response
const data = await base44.integrations.Core.InvokeLLM({
  prompt: "Extract key information about Apple Inc.",
  add_context_from_internet: true,
  response_json_schema: {
    type: "object",
    properties: {
      stock_price: { type: "number" },
      ceo: { type: "string" },
      headquarters: { type: "string" },
      recent_news: {
        type: "array",
        items: { type: "string" }
      }
    }
  }
});

// With file context
const analysis = await base44.integrations.Core.InvokeLLM({
  prompt: "Analyze this invoice and extract line items",
  file_urls: [invoiceFileUrl],
  response_json_schema: {
    type: "object",
    properties: {
      line_items: {
        type: "array",
        items: {
          type: "object",
          properties: {
            description: { type: "string" },
            quantity: { type: "number" },
            rate: { type: "number" },
            amount: { type: "number" }
          }
        }
      },
      total: { type: "number" }
    }
  }
});

Integration: SendEmail

Description: Send an email to a user.

Parameter Type Required Description
to string Yes Recipient email address
subject string Yes Email subject line
body string Yes Email body (supports HTML)
from_name string No Sender name (defaults to app name)

Returns: void

Example:

await base44.integrations.Core.SendEmail({
  to: 'client@example.com',
  subject: 'Your Event Has Been Confirmed',
  body: `
    <h2>Event Confirmation</h2>
    <p>Hello ${clientName},</p>
    <p>Your event "${eventName}" has been confirmed for ${eventDate}.</p>
    <p>Staff assigned: ${staffCount}</p>
    <p>Thank you for using KROW Workforce!</p>
  `,
  from_name: 'KROW Workforce Team'
});

Integration: UploadFile

Description: Upload a file to public storage.

Parameter Type Required Description
file File Yes File object to upload

Returns:

{
  "file_url": "string"  // Public URL to the uploaded file
}

Example:

// From file input
const fileInput = document.querySelector('input[type="file"]');
const file = fileInput.files[0];

const { file_url } = await base44.integrations.Core.UploadFile({
  file: file
});

// Use the URL
await base44.entities.Staff.update(staffId, {
  profile_picture: file_url
});

Integration: UploadPrivateFile

Description: Upload a file to private storage (requires signed URL for access).

Parameter Type Required Description
file File Yes File object to upload

Returns:

{
  "file_uri": "string"  // Private file URI (not directly accessible)
}

Example:

// Upload private document
const { file_uri } = await base44.integrations.Core.UploadPrivateFile({
  file: sensitiveDocument
});

// Store the URI
await base44.entities.Vendor.update(vendorId, {
  w9_document: file_uri
});

// Later, create signed URL for access
const { signed_url } = await base44.integrations.Core.CreateFileSignedUrl({
  file_uri: file_uri,
  expires_in: 3600  // 1 hour
});

Integration: CreateFileSignedUrl

Description: Create a temporary signed URL for accessing a private file.

Parameter Type Required Description
file_uri string Yes Private file URI
expires_in number No Expiration time in seconds (default: 300)

Returns:

{
  "signed_url": "string"  // Temporary URL for file access
}

Example:

// Create 1-hour signed URL
const { signed_url } = await base44.integrations.Core.CreateFileSignedUrl({
  file_uri: vendor.w9_document,
  expires_in: 3600
});

// Use signed URL
window.open(signed_url, '_blank');

Integration: ExtractDataFromUploadedFile

Description: Extract structured data from uploaded files (CSV, PDF, images).

Parameter Type Required Description
file_url string Yes URL to uploaded file
json_schema object Yes JSON schema defining expected data structure

Returns:

{
  "status": ""success" | "error"",
  "details": "string | null",  // Error details if status is error
  "output": "object[] | object | null"  // Extracted data if successful
}

Example:

// Upload CSV of staff members
const { file_url } = await base44.integrations.Core.UploadFile({
  file: csvFile
});

// Extract data
const result = await base44.integrations.Core.ExtractDataFromUploadedFile({
  file_url: file_url,
  json_schema: {
    type: "array",
    items: {
      type: "object",
      properties: {
        employee_name: { type: "string" },
        email: { type: "string" },
        position: { type: "string" },
        department: { type: "string" },
        phone: { type: "string" }
      }
    }
  }
});

if (result.status === "success") {
  // Bulk create staff from extracted data
  await base44.entities.Staff.bulkCreate(result.output);
}

Integration: GenerateImage

Description: Generate an AI image from a text prompt.

Parameter Type Required Description
prompt string Yes Detailed image description

Returns:

{
  "url": "string"  // URL to generated image
}

Example:

// Generate event banner
const { url } = await base44.integrations.Core.GenerateImage({
  prompt: "Professional corporate event banner with elegant food service theme, blue and white color scheme, modern minimalist design"
});

// Use the generated image
await base44.entities.Event.update(eventId, {
  banner_image: url
});

Data Models Reference

Complete Event Object Example

{
  "id": "evt_1234567890",
  "event_name": "Google Campus Lunch Service",
  "is_recurring": true,
  "recurrence_type": "date_range",
  "recurrence_start_date": "2025-01-01",
  "recurrence_end_date": "2025-12-31",
  "business_id": "bus_0987654321",
  "business_name": "Google",
  "vendor_id": "vnd_1122334455",
  "vendor_name": "Elite Staffing Solutions",
  "hub": "Mountain View Campus",
  "contract_type": "W2",
  "po_reference": "PO-2025-001",
  "status": "Active",
  "date": "2025-01-15",
  "shifts": [
    {
      "shift_name": "Lunch Shift",
      "shift_contact": "John Manager",
      "location_address": "1600 Amphitheatre Parkway",
      "roles": [
        {
          "role": "Server",
          "department": "Food Service",
          "count": 10,
          "start_time": "11:00",
          "end_time": "15:00",
          "hours": 4,
          "uniform": "White shirt, black pants",
          "break_minutes": 30,
          "cost_per_hour": 25,
          "total_value": 1000,
          "vendor_name": "Elite Staffing Solutions",
          "vendor_id": "vnd_1122334455"
        },
        {
          "role": "Cook",
          "department": "Kitchen",
          "count": 5,
          "start_time": "10:00",
          "end_time": "16:00",
          "hours": 6,
          "uniform": "Chef whites",
          "break_minutes": 30,
          "cost_per_hour": 30,
          "total_value": 900,
          "vendor_name": "Elite Staffing Solutions",
          "vendor_id": "vnd_1122334455"
        }
      ]
    }
  ],
  "addons": {
    "goal": {
      "enabled": true,
      "text": "Maintain 95% customer satisfaction"
    },
    "portal_access": true,
    "meal_provided": true,
    "travel_time": false,
    "tips": {
      "enabled": true,
      "amount": "pooled"
    }
  },
  "total": 1900,
  "requested": 15,
  "assigned_staff": [
    {
      "staff_id": "stf_111",
      "staff_name": "Maria Garcia",
      "role": "Server",
      "confirmed": true
    },
    {
      "staff_id": "stf_222",
      "staff_name": "John Smith",
      "role": "Cook",
      "confirmed": true
    }
  ],
  "client_name": "Sarah Johnson",
  "client_email": "sarah.johnson@google.com",
  "client_phone": "(650) 555-0123",
  "notes": "Ensure all staff arrive 15 minutes early",
  "created_date": "2025-01-01T10:00:00Z",
  "updated_date": "2025-01-10T14:30:00Z",
  "created_by": "admin@krow.com"
}

Complete Staff Object Example

{
  "id": "stf_9876543210",
  "employee_name": "Maria Garcia",
  "vendor_id": "vnd_1122334455",
  "vendor_name": "Elite Staffing Solutions",
  "manager": "Fernando Lopez",
  "contact_number": "(415) 555-0199",
  "phone": "(415) 555-0200",
  "email": "maria.garcia@email.com",
  "department": "Operations",
  "hub_location": "San Francisco Bay Area",
  "event_location": "Various",
  "address": "123 Main St, Apt 4B",
  "city": "San Francisco",
  "position": "Server",
  "position_2": "Bartender",
  "initial": "MG",
  "profile_type": "Skilled",
  "employment_type": "Part Time",
  "english": "Fluent",
  "english_required": true,
  "check_in": "2025-01-15",
  "rating": 4.8,
  "shift_coverage_percentage": 95,
  "cancellation_count": 2,
  "no_show_count": 0,
  "total_shifts": 47,
  "reliability_score": 96,
  "background_check_status": "cleared",
  "background_check_date": "2024-06-15",
  "certifications": [
    {
      "name": "Food Handler Certificate",
      "issued_date": "2024-06-01",
      "expiry_date": "2026-06-01",
      "issuer": "ServSafe"
    },
    {
      "name": "Alcohol Service Permit",
      "issued_date": "2024-07-01",
      "expiry_date": "2025-07-01",
      "issuer": "CA ABC"
    }
  ],
  "notes": "Excellent customer service skills. Prefers weekend shifts.",
  "created_date": "2024-01-10T09:00:00Z",
  "updated_date": "2025-01-15T16:45:00Z",
  "created_by": "vendor@elitestaffing.com"
}

Complete Vendor Object Example

{
  "id": "vnd_1122334455",
  "vendor_number": "VN-0042",
  "legal_name": "Elite Staffing Solutions Inc.",
  "doing_business_as": "Elite Staffing",
  "region": "Bay Area",
  "state": "California",
  "city": "San Francisco",
  "service_specialty": "Event Staffing & Hospitality Services",
  "workforce_count": 250,
  "platform_type": "Full Platform",
  "tax_id": "12-3456789",
  "business_type": "Corporation",
  "primary_contact_name": "Robert Chen",
  "primary_contact_email": "robert.chen@elitestaffing.com",
  "primary_contact_phone": "(415) 555-0100",
  "billing_address": "456 Business Plaza, Suite 200, San Francisco, CA 94102",
  "service_address": "456 Business Plaza, Suite 200, San Francisco, CA 94102",
  "coverage_regions": [
    "San Francisco",
    "Oakland",
    "San Jose",
    "Peninsula",
    "East Bay"
  ],
  "eligible_roles": [
    "Server",
    "Bartender",
    "Cook",
    "Dishwasher",
    "Event Manager",
    "Catering Staff"
  ],
  "insurance_certificate": "https://storage.example.com/certs/elite-insurance.pdf",
  "insurance_expiry": "2025-12-31",
  "w9_document": "https://storage.example.com/docs/elite-w9.pdf",
  "coi_document": "https://storage.example.com/docs/elite-coi.pdf",
  "approval_status": "approved",
  "approved_date": "2024-01-15",
  "approved_by": "admin@krow.com",
  "is_active": true,
  "notes": "Preferred vendor for tech company events. Excellent track record.",
  "created_date": "2024-01-10T10:00:00Z",
  "updated_date": "2025-01-05T11:20:00Z"
}

Code Examples

Example 1: Create Event with Staff Assignment

import { base44 } from "@/api/base44Client";

async function createEventAndAssignStaff() {
  // Get current user
  const user = await base44.auth.me();
  
  // Create new event
  const event = await base44.entities.Event.create({
    event_name: "Corporate Holiday Party",
    business_name: "Acme Corporation",
    date: "2025-12-20",
    hub: "Downtown Office",
    status: "Draft",
    requested: 20,
    shifts: [
      {
        shift_name: "Evening Service",
        location_address: "123 Corporate Plaza",
        roles: [
          {
            role: "Server",
            department: "Food Service",
            count: 15,
            start_time: "18:00",
            end_time: "23:00",
            hours: 5,
            cost_per_hour: 28,
            total_value: 2100
          },
          {
            role: "Bartender",
            department: "Bar Service",
            count: 5,
            start_time: "17:30",
            end_time: "23:30",
            hours: 6,
            cost_per_hour: 32,
            total_value: 960
          }
        ]
      }
    ],
    total: 3060,
    client_name: user.full_name,
    client_email: user.email
  });
  
  // Find available staff
  const availableStaff = await base44.entities.Staff.filter({
    position: "Server",
    rating: { $gte: 4.5 },
    employment_type: { $in: ["Part Time", "Full Time"] }
  }, '-rating', 15);
  
  // Assign staff to event
  const assignedStaff = availableStaff.map(staff => ({
    staff_id: staff.id,
    staff_name: staff.employee_name,
    role: "Server",
    confirmed: false
  }));
  
  await base44.entities.Event.update(event.id, {
    assigned_staff: assignedStaff,
    status: "Pending"
  });
  
  // Create activity log
  await base44.entities.ActivityLog.create({
    title: "Event Created",
    description: `New event "${event.event_name}" created and staff assigned`,
    activity_type: "event_created",
    related_entity_type: "event",
    related_entity_id: event.id,
    user_id: user.id,
    is_read: false,
    icon_type: "calendar",
    icon_color: "blue"
  });
  
  return event;
}

Example 2: Send Invoice Reminder Emails

import { base44 } from "@/api/base44Client";

async function sendInvoiceReminders() {
  // Get overdue invoices
  const today = new Date();
  const overdueInvoices = await base44.entities.Invoice.filter({
    status: { $in: ["Open", "Overdue"] },
    due_date: { $lt: today.toISOString().split('T')[0] }
  });
  
  // Send reminder for each
  for (const invoice of overdueInvoices) {
    // Update status
    await base44.entities.Invoice.update(invoice.id, {
      status: "Overdue"
    });
    
    // Get business contact
    const business = await base44.entities.Business.filter({
      business_name: invoice.business_name
    });
    
    if (business.length > 0) {
      const contact = business[0];
      
      // Send email
      await base44.integrations.Core.SendEmail({
        to: contact.email,
        subject: `Payment Reminder: Invoice ${invoice.invoice_number}`,
        body: `
          <h2>Payment Reminder</h2>
          <p>Dear ${contact.contact_name},</p>
          <p>This is a friendly reminder that invoice <strong>${invoice.invoice_number}</strong> 
          for <strong>$${invoice.amount.toLocaleString()}</strong> is now overdue.</p>
          <p><strong>Due Date:</strong> ${invoice.due_date}</p>
          <p><strong>Amount:</strong> $${invoice.amount.toLocaleString()}</p>
          <p>Please process payment at your earliest convenience.</p>
          <p>Thank you,<br>KROW Workforce Team</p>
        `,
        from_name: "KROW Accounts Receivable"
      });
      
      // Log activity
      await base44.entities.ActivityLog.create({
        title: "Invoice Reminder Sent",
        description: `Reminder sent for invoice ${invoice.invoice_number}`,
        activity_type: "invoice_created",
        related_entity_type: "invoice",
        related_entity_id: invoice.id,
        user_id: contact.id || "system",
        icon_type: "invoice",
        icon_color: "yellow"
      });
    }
  }
  
  return overdueInvoices.length;
}

Example 3: AI-Powered Staff Recommendation

import { base44 } from "@/api/base44Client";

async function getStaffRecommendations(eventId) {
  // Get event details
  const events = await base44.entities.Event.filter({ id: eventId });
  const event = events[0];
  
  // Get all available staff
  const allStaff = await base44.entities.Staff.list();
  
  // Use AI to analyze and recommend
  const recommendations = await base44.integrations.Core.InvokeLLM({
    prompt: `
      Analyze this event and recommend the best staff members.
      
      Event Details:
      - Name: ${event.event_name}
      - Date: ${event.date}
      - Location: ${event.hub}
      - Roles Needed: ${JSON.stringify(event.shifts)}
      
      Available Staff:
      ${JSON.stringify(allStaff.map(s => ({
        id: s.id,
        name: s.employee_name,
        position: s.position,
        rating: s.rating,
        reliability: s.reliability_score,
        experience: s.total_shifts
      })))}
      
      Recommend the top staff for each role based on:
      1. Position match
      2. Rating and reliability
      3. Experience level
      4. Availability patterns
      
      Provide reasoning for each recommendation.
    `,
    response_json_schema: {
      type: "object",
      properties: {
        recommendations: {
          type: "array",
          items: {
            type: "object",
            properties: {
              staff_id: { type: "string" },
              staff_name: { type: "string" },
              role: { type: "string" },
              score: { type: "number" },
              reasoning: { type: "string" }
            }
          }
        },
        overall_analysis: { type: "string" }
      }
    }
  });
  
  return recommendations;
}

Example 4: Bulk Import Staff from CSV

import { base44 } from "@/api/base44Client";

async function importStaffFromCSV(file) {
  // Upload file
  const { file_url } = await base44.integrations.Core.UploadFile({
    file: file
  });
  
  // Extract data
  const result = await base44.integrations.Core.ExtractDataFromUploadedFile({
    file_url: file_url,
    json_schema: {
      type: "array",
      items: {
        type: "object",
        properties: {
          employee_name: { type: "string" },
          email: { type: "string" },
          phone: { type: "string" },
          position: { type: "string" },
          department: { type: "string" },
          employment_type: { type: "string" },
          vendor_name: { type: "string" }
        },
        required: ["employee_name"]
      }
    }
  });
  
  if (result.status === "error") {
    throw new Error(result.details);
  }
  
  // Bulk create staff
  const createdStaff = await base44.entities.Staff.bulkCreate(
    result.output.map(staff => ({
      ...staff,
      rating: 0,
      reliability_score: 0,
      total_shifts: 0,
      background_check_status: "pending"
    }))
  );
  
  // Create activity logs
  await base44.entities.ActivityLog.create({
    title: "Bulk Staff Import",
    description: `${createdStaff.length} staff members imported from CSV`,
    activity_type: "staff_assigned",
    user_id: (await base44.auth.me()).id,
    icon_type: "user",
    icon_color: "green"
  });
  
  return createdStaff;
}

Example 5: Generate Performance Report

import { base44 } from "@/api/base44Client";

async function generateVendorPerformanceReport(vendorId) {
  // Get vendor details
  const vendors = await base44.entities.Vendor.filter({ id: vendorId });
  const vendor = vendors[0];
  
  // Get vendor's staff
  const staff = await base44.entities.Staff.filter({
    vendor_id: vendorId
  });
  
  // Get vendor's events
  const events = await base44.entities.Event.filter({
    vendor_id: vendorId,
    status: "Completed"
  });
  
  // Calculate metrics
  const totalStaff = staff.length;
  const avgRating = staff.reduce((sum, s) => sum + (s.rating || 0), 0) / totalStaff;
  const avgReliability = staff.reduce((sum, s) => sum + (s.reliability_score || 0), 0) / totalStaff;
  const totalEvents = events.length;
  const totalRevenue = events.reduce((sum, e) => sum + (e.total || 0), 0);
  
  // Use AI to generate insights
  const report = await base44.integrations.Core.InvokeLLM({
    prompt: `
      Generate a comprehensive performance report for this vendor:
      
      Vendor: ${vendor.legal_name}
      Workforce Size: ${totalStaff}
      Average Staff Rating: ${avgRating.toFixed(2)}/5.0
      Average Reliability: ${avgReliability.toFixed(1)}%
      Events Completed: ${totalEvents}
      Total Revenue: $${totalRevenue.toLocaleString()}
      
      Staff Performance Distribution:
      ${JSON.stringify(staff.map(s => ({
        name: s.employee_name,
        rating: s.rating,
        reliability: s.reliability_score,
        shifts: s.total_shifts
      })))}
      
      Provide:
      1. Overall performance summary
      2. Key strengths
      3. Areas for improvement
      4. Specific recommendations
      5. Comparison to industry benchmarks
    `,
    response_json_schema: {
      type: "object",
      properties: {
        summary: { type: "string" },
        grade: { type: "string" },
        strengths: {
          type: "array",
          items: { type: "string" }
        },
        improvements: {
          type: "array",
          items: { type: "string" }
        },
        recommendations: {
          type: "array",
          items: { type: "string" }
        },
        benchmark_comparison: { type: "string" }
      }
    }
  });
  
  return {
    vendor,
    metrics: {
      totalStaff,
      avgRating,
      avgReliability,
      totalEvents,
      totalRevenue
    },
    analysis: report
  };
}

Best Practices

1. Error Handling

try {
  const event = await base44.entities.Event.create(eventData);
  // Success handling
} catch (error) {
  console.error("Failed to create event:", error);
  // Show user-friendly error message
  toast({
    title: "❌ Error",
    description: "Failed to create event. Please try again.",
    variant: "destructive"
  });
}

2. Query Optimization

// ❌ Bad: Fetch all then filter in memory
const allEvents = await base44.entities.Event.list();
const vendorEvents = allEvents.filter(e => e.vendor_id === vendorId);

// ✅ Good: Filter at database level
const vendorEvents = await base44.entities.Event.filter({
  vendor_id: vendorId
});

3. Pagination

// Fetch in batches
const pageSize = 50;
let page = 0;
let allRecords = [];

while (true) {
  const batch = await base44.entities.Event.list(
    '-created_date',
    pageSize,
    page * pageSize
  );
  
  if (batch.length === 0) break;
  
  allRecords = [...allRecords, ...batch];
  page++;
}

4. Caching with React Query

import { useQuery } from "@tanstack/react-query";

function useEvents() {
  return useQuery({
    queryKey: ['events'],
    queryFn: () => base44.entities.Event.list('-date'),
    initialData: [],
    staleTime: 5 * 60 * 1000,  // 5 minutes
    cacheTime: 10 * 60 * 1000  // 10 minutes
  });
}

5. Batch Operations

// ❌ Bad: Multiple sequential creates
for (const staff of staffList) {
  await base44.entities.Staff.create(staff);
}

// ✅ Good: Single bulk create
await base44.entities.Staff.bulkCreate(staffList);

Security Considerations

1. User Entity Access Control

  • Only admin users can access other users' data
  • Regular users can only view/update their own records
  • Built-in security rules are automatically enforced

2. Private Files

  • Use UploadPrivateFile for sensitive documents
  • Always use signed URLs with appropriate expiration
  • Never expose private file URIs directly

3. Email Validation

  • Always validate email formats before sending
  • Use proper HTML escaping in email bodies
  • Consider rate limiting for bulk emails

4. Data Validation

  • Validate all input data before entity operations
  • Use enum constraints where applicable
  • Implement client-side validation before API calls

Rate Limits & Quotas

Standard Limits

  • Entity Operations: 1000 requests/minute
  • LLM Invocations: 100 requests/minute
  • File Uploads: 100 MB per file
  • Email Sending: 1000 emails/day

Best Practices for Limits

  • Implement exponential backoff for retries
  • Cache frequently accessed data
  • Use bulk operations when possible
  • Monitor usage via activity logs

Changelog

Version 2.0 (2025-01-11)

  • Complete entity schema documentation
  • Added 17 entity schemas with full field specifications
  • Comprehensive SDK operation examples
  • Core integration specifications
  • Advanced code examples
  • Best practices and security guidelines

Version 1.0 (2024-12-01)

  • Initial API documentation
  • Basic entity schemas
  • Core integration endpoints

Support & Resources

  • Documentation
    • Platform Docs: https://docs.base44.com
    • API Reference: https://api.base44.com/docs
    • Community Forum: https://community.base44.com
  • Contact
    • Technical Support: support@krow.com
    • Sales Inquiries: sales@krow.com
    • General Questions: info@krow.com

© 2025 KROW Workforce. All rights reserved.