Authenticated API
This endpoint requires a valid JWT Bearer token. Accessible via the API gateway.
Training API
Staff training, learning management, certifications, and onboarding programs.
Overview
| Attribute | Value |
|---|---|
| Base Path | /api/v1/training |
| Authentication | Bearer Token |
| Required Roles | restaurant_staff, pos_staff, server, kitchen, host, manager, restaurant_manager, tenant_admin, platform_admin, system_admin, super_admin |
Courses
List Courses
Retrieve available training courses.
GET /api/v1/training/courses
Query Parameters
| Parameter | Type | Description |
|---|---|---|
category | string | Filter by category |
role | string | Filter by target role |
status | string | active, draft, archived |
required | boolean | Filter required courses |
Response
{
"data": [
{
"id": "course_001",
"title": "Food Safety Fundamentals",
"description": "Essential food safety practices for all staff",
"category": "compliance",
"duration_minutes": 45,
"modules": 5,
"required": true,
"roles": ["all"],
"certification": {
"provided": true,
"validity_days": 365,
"name": "Food Handler Certificate"
},
"completion_rate": 92,
"avg_score": 87,
"thumbnail_url": "https://...",
"status": "active",
"created_at": "2025-01-01T00:00:00Z"
},
{
"id": "course_002",
"title": "POS System Training",
"description": "Complete guide to using the point of sale system",
"category": "systems",
"duration_minutes": 30,
"modules": 4,
"required": true,
"roles": ["server", "cashier", "host"],
"certification": {
"provided": false
}
}
]
}
Course Categories
| Category | Description |
|---|---|
compliance | Required compliance training |
safety | Safety procedures |
systems | Software/system training |
service | Customer service |
product | Menu/product knowledge |
leadership | Management skills |
onboarding | New hire orientation |
Get Course
GET /api/v1/training/courses/{course_id}
Response
{
"id": "course_001",
"title": "Food Safety Fundamentals",
"description": "Essential food safety practices for all staff",
"category": "compliance",
"modules": [
{
"id": "mod_001",
"title": "Introduction to Food Safety",
"type": "video",
"duration_minutes": 8,
"content_url": "https://...",
"order": 1
},
{
"id": "mod_002",
"title": "Temperature Control",
"type": "interactive",
"duration_minutes": 12,
"order": 2
},
{
"id": "mod_003",
"title": "Cross-Contamination Prevention",
"type": "video",
"duration_minutes": 10,
"order": 3
},
{
"id": "mod_004",
"title": "Personal Hygiene",
"type": "text",
"duration_minutes": 5,
"order": 4
},
{
"id": "mod_005",
"title": "Final Assessment",
"type": "quiz",
"duration_minutes": 10,
"passing_score": 80,
"questions": 20,
"order": 5
}
],
"prerequisites": [],
"resources": [
{
"title": "Food Safety Quick Reference",
"type": "pdf",
"url": "https://..."
}
]
}
Create Course
POST /api/v1/training/courses
Request Body
{
"title": "Allergy Awareness Training",
"description": "How to handle food allergies safely",
"category": "safety",
"roles": ["server", "cook", "host"],
"required": true,
"modules": [
{
"title": "Common Food Allergies",
"type": "video",
"content_url": "https://...",
"duration_minutes": 10
},
{
"title": "Allergy Quiz",
"type": "quiz",
"passing_score": 90
}
],
"certification": {
"provided": true,
"validity_days": 365
}
}
Employee Progress
Get Employee Progress
GET /api/v1/training/employees/{employee_id}/progress
Response
{
"employee_id": "emp_001",
"employee_name": "John Smith",
"role": "server",
"overall_progress": {
"completed_courses": 8,
"total_required": 10,
"completion_percent": 80,
"avg_score": 88
},
"courses": [
{
"course_id": "course_001",
"title": "Food Safety Fundamentals",
"status": "completed",
"progress_percent": 100,
"score": 92,
"completed_at": "2026-01-15T14:00:00Z",
"certificate_url": "https://..."
},
{
"course_id": "course_002",
"title": "POS System Training",
"status": "in_progress",
"progress_percent": 60,
"current_module": "mod_003",
"started_at": "2026-01-24T10:00:00Z"
},
{
"course_id": "course_003",
"title": "Alcohol Service",
"status": "not_started",
"required": true,
"due_date": "2026-02-01"
}
],
"certifications": [
{
"name": "Food Handler Certificate",
"course_id": "course_001",
"issued_at": "2026-01-15T14:00:00Z",
"expires_at": "2027-01-15T14:00:00Z",
"status": "valid"
}
],
"upcoming_due": [
{
"course_id": "course_003",
"title": "Alcohol Service",
"due_date": "2026-02-01"
}
]
}
Progress Status Values
| Status | Description |
|---|---|
not_started | Course not begun |
in_progress | Currently taking |
completed | Successfully finished |
failed | Did not pass |
expired | Certification expired |
Start Course
POST /api/v1/training/employees/{employee_id}/courses/{course_id}/start
Response
{
"enrollment_id": "enroll_001",
"course_id": "course_001",
"employee_id": "emp_001",
"status": "in_progress",
"current_module": "mod_001",
"started_at": "2026-01-24T19:30:00Z",
"resume_url": "https://training.olympuscloud.ai/courses/course_001"
}
Update Progress
POST /api/v1/training/employees/{employee_id}/courses/{course_id}/progress
Request Body
{
"module_id": "mod_002",
"completed": true,
"time_spent_seconds": 720
}
Submit Quiz
POST /api/v1/training/employees/{employee_id}/courses/{course_id}/quiz
Request Body
{
"module_id": "mod_005",
"answers": [
{"question_id": "q1", "answer": "b"},
{"question_id": "q2", "answer": "c"},
{"question_id": "q3", "answer": ["a", "c"]}
]
}
Response
{
"score": 92,
"passing_score": 80,
"passed": true,
"correct": 18,
"total": 20,
"feedback": [
{
"question_id": "q5",
"correct": false,
"correct_answer": "b",
"explanation": "The danger zone temperature range is 40°F to 140°F"
}
],
"certificate_issued": true,
"certificate_url": "https://..."
}
Assignments
Assign Course
Assign course to employee(s).
POST /api/v1/training/assignments
Request Body
{
"course_id": "course_003",
"assignees": {
"type": "employees",
"ids": ["emp_001", "emp_002", "emp_003"]
},
"due_date": "2026-02-01",
"priority": "high",
"message": "Please complete alcohol service training before Friday"
}
Assign to Role
POST /api/v1/training/assignments
Request Body
{
"course_id": "course_001",
"assignees": {
"type": "role",
"roles": ["server", "cook"]
},
"due_date": "2026-02-15",
"recurring": {
"enabled": true,
"frequency": "yearly"
}
}
List Assignments
GET /api/v1/training/assignments
Query Parameters
| Parameter | Type | Description |
|---|---|---|
employee_id | string | Filter by employee |
course_id | string | Filter by course |
status | string | pending, completed, overdue |
Certifications
List Certifications
GET /api/v1/training/certifications
Query Parameters
| Parameter | Type | Description |
|---|---|---|
employee_id | string | Filter by employee |
status | string | valid, expiring_soon, expired |
Response
{
"data": [
{
"id": "cert_001",
"employee_id": "emp_001",
"employee_name": "John Smith",
"certification_name": "Food Handler Certificate",
"course_id": "course_001",
"issued_at": "2026-01-15T14:00:00Z",
"expires_at": "2027-01-15T14:00:00Z",
"status": "valid",
"certificate_url": "https://...",
"verification_code": "CERT-2026-001234"
}
]
}
Verify Certification
GET /api/v1/training/certifications/verify/{verification_code}
Response
{
"valid": true,
"certification": {
"name": "Food Handler Certificate",
"holder_name": "John Smith",
"issued_at": "2026-01-15T14:00:00Z",
"expires_at": "2027-01-15T14:00:00Z",
"issuer": "Olympus Cloud Training"
}
}
Get Expiring Certifications
GET /api/v1/training/certifications/expiring
Query Parameters
| Parameter | Type | Description |
|---|---|---|
days_ahead | integer | Days until expiration |
location_id | uuid | Filter by location |
Analytics
Get Training Analytics
GET /api/v1/training/analytics
Query Parameters
| Parameter | Type | Description |
|---|---|---|
location_id | uuid | Filter by location |
start_date | date | Period start |
end_date | date | Period end |
Response
{
"period": {
"start": "2026-01-01",
"end": "2026-01-24"
},
"summary": {
"total_employees": 45,
"fully_compliant": 38,
"compliance_rate": 84.4,
"courses_completed": 125,
"avg_score": 87,
"training_hours": 156
},
"by_course": [
{
"course_id": "course_001",
"title": "Food Safety",
"enrollments": 45,
"completions": 42,
"completion_rate": 93.3,
"avg_score": 88
}
],
"by_department": [
{
"department": "Front of House",
"employees": 25,
"compliance_rate": 88
},
{
"department": "Back of House",
"employees": 20,
"compliance_rate": 80
}
],
"overdue_assignments": 8,
"expiring_certifications_30_days": 5
}
Get Compliance Report
GET /api/v1/training/analytics/compliance
Response
{
"overall_compliance": 84.4,
"by_requirement": [
{
"requirement": "Food Safety",
"required_by": "Health Dept",
"compliant_employees": 42,
"total_employees": 45,
"compliance_rate": 93.3,
"non_compliant": [
{"employee_id": "emp_015", "name": "Jane Doe", "days_overdue": 5}
]
},
{
"requirement": "Alcohol Service",
"required_by": "State Law",
"compliant_employees": 18,
"total_employees": 20,
"compliance_rate": 90
}
]
}
Onboarding
Get Onboarding Checklist
GET /api/v1/training/onboarding/{employee_id}
Response
{
"employee_id": "emp_050",
"employee_name": "New Hire Alex",
"role": "server",
"start_date": "2026-01-24",
"progress_percent": 40,
"checklist": [
{
"id": "onboard_001",
"title": "Complete paperwork",
"type": "task",
"status": "completed",
"completed_at": "2026-01-24T09:00:00Z"
},
{
"id": "onboard_002",
"title": "Food Safety Training",
"type": "course",
"course_id": "course_001",
"status": "in_progress",
"progress_percent": 60
},
{
"id": "onboard_003",
"title": "POS Training",
"type": "course",
"course_id": "course_002",
"status": "not_started"
},
{
"id": "onboard_004",
"title": "Shadow shift with mentor",
"type": "task",
"status": "scheduled",
"scheduled_date": "2026-01-25"
}
],
"mentor": {
"id": "emp_001",
"name": "Senior Server John"
},
"target_completion_date": "2026-01-31"
}
Update Onboarding Task
PATCH /api/v1/training/onboarding/{employee_id}/tasks/{task_id}
Request Body
{
"status": "completed",
"notes": "Completed shadow shift successfully"
}
Webhooks
| Event | Description |
|---|---|
training.course_completed | Employee finished course |
training.quiz_passed | Quiz passed |
training.quiz_failed | Quiz failed |
training.certification_issued | New certification |
training.certification_expiring | Cert expiring soon |
training.assignment_overdue | Assignment past due |
training.onboarding_complete | Onboarding finished |
Error Responses
| Status | Code | Description |
|---|---|---|
| 400 | quiz_not_ready | Prerequisites not met |
| 400 | already_enrolled | Already taking course |
| 404 | course_not_found | Course ID not found |
| 409 | certification_valid | Current cert still valid |
Related Documentation
- Training Guide - Training setup
- Onboarding - Onboarding process
- Compliance - Compliance requirements