Skip to main content
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}
ParameterTypeRequiredDescription
location_idUUIDYesLocation to list stations for
station_typestringNoFilter by station type
active_onlybooleanNoOnly 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
}
]
MetricDescription
pending_countTickets waiting to start
in_progress_countTickets being prepared
ready_countTickets complete, waiting for pickup
avg_wait_time_secondsAverage time from creation to start
avg_prep_time_secondsAverage time from start to complete
completed_todayTotal tickets completed today
load_percentageCurrent 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.