Internal API
This describes internal KDS functionality. Only the 6 core KDS endpoints (tickets, expo, bump, recall, void, priority) are exposed through the API gateway.
KDS Station Management
CRUD operations for kitchen stations.
Create Station
Create a new kitchen station.
Permissions Required: manager, owner, tenant_admin
POST /api/v1/kds/stations
Authorization: Bearer {access_token}
Content-Type: application/json
{
"location_id": "550e8400-e29b-41d4-a716-446655440000",
"name": "Main Grill",
"station_type": "grill",
"display_order": 1,
"settings": {
"color": "#ff6b35",
"sound_alerts": true,
"alert_threshold_seconds": 600
}
}
Response (201 Created)
{
"id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"tenant_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"location_id": "550e8400-e29b-41d4-a716-446655440000",
"name": "Main Grill",
"station_type": "grill",
"display_order": 1,
"settings": {
"color": "#ff6b35",
"sound_alerts": true,
"alert_threshold_seconds": 600
},
"is_active": true,
"created_at": "2026-01-23T12:00:00Z",
"updated_at": "2026-01-23T12:00:00Z"
}
List Stations
GET /api/v1/kds/stations?location_id={location_id}&station_type=grill&active_only=true
Authorization: Bearer {access_token}
| Parameter | Type | Required | Description |
|---|---|---|---|
location_id | UUID | Yes | Location to list stations for |
station_type | string | No | Filter by station type |
active_only | boolean | No | Only show active stations (default: true) |
Get Station
GET /api/v1/kds/stations/{station_id}
Authorization: Bearer {access_token}
Update Station
Permissions Required: manager, owner, tenant_admin
PUT /api/v1/kds/stations/{station_id}
Authorization: Bearer {access_token}
Content-Type: application/json
{
"name": "Updated Grill Station",
"station_type": "grill",
"display_order": 2,
"settings": {
"color": "#22c55e"
},
"is_active": true
}
Station Statistics
Get Station Stats
Get performance statistics for all stations at a location.
Permissions Required: manager, owner, tenant_admin
GET /api/v1/kds/stats?location_id={location_id}
Authorization: Bearer {access_token}
Response
[
{
"station_id": "station-grill",
"station_name": "Main Grill",
"pending_count": 5,
"in_progress_count": 2,
"ready_count": 1,
"avg_wait_time_seconds": 180.5,
"avg_prep_time_seconds": 420.3,
"completed_today": 145,
"load_percentage": 0.65
},
{
"station_id": "station-fry",
"station_name": "Fry Station",
"pending_count": 3,
"in_progress_count": 1,
"ready_count": 0,
"avg_wait_time_seconds": 120.2,
"avg_prep_time_seconds": 280.1,
"completed_today": 210,
"load_percentage": 0.45
}
]
| Metric | Description |
|---|---|
pending_count | Tickets waiting to start |
in_progress_count | Tickets being prepared |
ready_count | Tickets complete, waiting for pickup |
avg_wait_time_seconds | Average time from creation to start |
avg_prep_time_seconds | Average time from start to complete |
completed_today | Total tickets completed today |
load_percentage | Current load (0.0 to 1.0) |
Prep Time Statistics
The system tracks prep time statistics for ML-based predictions:
{
"menu_item_id": "item-burger",
"station_id": "station-grill",
"avg_prep_time_seconds": 425.5,
"min_prep_time_seconds": 280,
"max_prep_time_seconds": 720,
"sample_count": 1523,
"last_updated": "2026-01-23T12:00:00Z"
}
Statistics are collected from completed tickets and used by the AI prep time prediction service.