Skip to main content
Authenticated API

This endpoint requires a valid JWT Bearer token. Accessible via the API gateway at /v1/commerce/*.

Kiosk API

Manage self-service kiosk devices, ordering sessions, and configuration.

Authentication Required

All endpoints require a Device Token or Bearer Token. Device tokens are issued during kiosk registration. See Authentication for details.

Overview

AttributeValue
Base Path/api/v1/kiosk
AuthenticationDevice Token or Bearer Token
Required Rolespos_staff, server, restaurant_staff, restaurant_manager, kitchen, tenant_admin, platform_admin, system_admin, super_admin

Device Management

Register Kiosk

Register a new kiosk device.

POST /api/v1/kiosk/devices

Request Body

{
"location_id": "loc_123",
"name": "Kiosk 1",
"hardware_id": "device_serial_123",
"model": "olympus_k1",
"position": "entrance_right"
}

Response

{
"device_id": "kiosk_001",
"device_token": "kt_abc123...",
"location_id": "loc_123",
"name": "Kiosk 1",
"status": "online",
"registered_at": "2026-01-24T10:00:00Z"
}

List Kiosks

Get all kiosks for a location.

GET /api/v1/kiosk/devices

Query Parameters

ParameterTypeDescription
location_iduuidFilter by location
statusstringonline, offline, maintenance

Response

{
"data": [
{
"device_id": "kiosk_001",
"name": "Kiosk 1",
"location_id": "loc_123",
"status": "online",
"current_session": null,
"orders_today": 45,
"last_heartbeat": "2026-01-24T18:29:00Z",
"software_version": "3.2.1"
}
]
}

Get Kiosk Status

Get detailed kiosk status.

GET /api/v1/kiosk/devices/{device_id}/status

Response

{
"device_id": "kiosk_001",
"status": "online",
"mode": "ordering",
"current_session": {
"id": "sess_abc",
"started_at": "2026-01-24T18:25:00Z",
"cart_items": 3
},
"hardware": {
"printer_status": "ready",
"card_reader_status": "ready",
"screen_brightness": 80
},
"metrics": {
"orders_today": 45,
"revenue_today": 678.50,
"avg_order_value": 15.08,
"conversion_rate": 0.72
}
}

Heartbeat

Send device heartbeat (every 60 seconds).

POST /api/v1/kiosk/devices/{device_id}/heartbeat

Request Body

{
"software_version": "3.2.1",
"uptime_seconds": 43200,
"memory_usage_percent": 45,
"hardware_status": {
"printer": "ready",
"card_reader": "ready",
"touchscreen": "ready"
}
}

Session Management

Session Timeouts

Kiosk sessions automatically expire after the configured idle timeout (default: 180 seconds). A warning is displayed 60 seconds before timeout. Expired sessions cannot be resumed -- a new session must be started.

Start Session

Begin a new ordering session.

POST /api/v1/kiosk/sessions

Request Body

{
"device_id": "kiosk_001",
"language": "en",
"accessibility_mode": false
}

Response

{
"session_id": "sess_abc",
"device_id": "kiosk_001",
"started_at": "2026-01-24T18:25:00Z",
"timeout_seconds": 180,
"menu_version": "2026-01-24-1"
}

Get Session

Retrieve current session state.

GET /api/v1/kiosk/sessions/{session_id}

Response

{
"session_id": "sess_abc",
"status": "active",
"cart": {
"items": [
{
"id": "cart_001",
"menu_item_id": "item_123",
"name": "Burger Combo",
"quantity": 1,
"modifiers": [
{"id": "mod_001", "name": "No Onions"}
],
"unit_price": 12.99,
"total": 12.99
}
],
"subtotal": 12.99,
"tax": 1.17,
"total": 14.16
},
"idle_seconds": 15,
"timeout_warning": false
}

Add to Cart

Add item to session cart.

POST /api/v1/kiosk/sessions/{session_id}/cart

Request Body

{
"menu_item_id": "item_123",
"quantity": 1,
"modifiers": [
{"modifier_id": "mod_001", "quantity": 1}
],
"special_instructions": "Extra napkins please"
}

Update Cart Item

Modify cart item quantity or modifiers.

PUT /api/v1/kiosk/sessions/{session_id}/cart/{cart_item_id}

Remove from Cart

Remove item from cart.

DELETE /api/v1/kiosk/sessions/{session_id}/cart/{cart_item_id}

Complete Order

Submit the order.

POST /api/v1/kiosk/sessions/{session_id}/checkout

Request Body

{
"payment_method": "card",
"order_type": "dine_in",
"customer_name": "John"
}

Response

{
"order_id": "ord_xyz",
"order_number": "K-042",
"status": "pending_payment",
"total": 14.16,
"payment_terminal_request": {
"amount": 14.16,
"transaction_id": "txn_abc"
}
}

End Session

Terminate session (timeout or cancel).

DELETE /api/v1/kiosk/sessions/{session_id}

Query Parameters

ParameterTypeDescription
reasonstringtimeout, cancelled, completed

Configuration

Get Kiosk Configuration

Retrieve kiosk display and behavior settings.

GET /api/v1/kiosk/devices/{device_id}/config

Response

{
"display": {
"language": "en",
"theme": "light",
"font_size": "medium",
"attract_mode_enabled": true,
"attract_mode_timeout_seconds": 30
},
"ordering": {
"allow_dine_in": true,
"allow_takeout": true,
"require_name": true,
"suggest_upsells": true,
"max_items_per_order": 20
},
"payment": {
"accepted_methods": ["card", "apple_pay", "google_pay"],
"allow_cash": false,
"tip_enabled": true,
"tip_presets": [15, 18, 20]
},
"accessibility": {
"high_contrast_available": true,
"large_text_available": true,
"audio_assistance": true,
"wheelchair_height": true
},
"timeout": {
"idle_warning_seconds": 120,
"idle_timeout_seconds": 180,
"payment_timeout_seconds": 120
}
}

Update Configuration

Update kiosk settings.

PUT /api/v1/kiosk/devices/{device_id}/config

Attract Mode

Set Attract Content

Configure attract mode display.

PUT /api/v1/kiosk/devices/{device_id}/attract

Request Body

{
"slides": [
{
"type": "image",
"url": "https://...",
"duration_seconds": 5
},
{
"type": "video",
"url": "https://...",
"duration_seconds": 15
},
{
"type": "promotion",
"promotion_id": "promo_001",
"duration_seconds": 8
}
],
"call_to_action": "Touch to Start Ordering"
}

Analytics

Get Kiosk Analytics

Retrieve kiosk performance metrics.

GET /api/v1/kiosk/analytics

Query Parameters

ParameterTypeDescription
location_iduuidFilter by location
device_idstringSpecific kiosk
start_datedateAnalysis start
end_datedateAnalysis end

Response

{
"period": {
"start": "2026-01-24",
"end": "2026-01-24"
},
"summary": {
"total_sessions": 180,
"completed_orders": 130,
"conversion_rate": 0.72,
"abandoned_sessions": 50,
"total_revenue": 1950.00,
"avg_order_value": 15.00
},
"by_device": [
{
"device_id": "kiosk_001",
"sessions": 95,
"orders": 70,
"revenue": 1050.00
}
],
"popular_items": [
{"item_id": "item_123", "name": "Burger Combo", "count": 45}
],
"peak_hours": [12, 13, 18, 19]
}

Webhooks

EventDescription
kiosk.onlineKiosk came online
kiosk.offlineKiosk went offline
kiosk.session_startedNew session began
kiosk.order_completedOrder submitted
kiosk.session_abandonedSession timed out
kiosk.hardware_alertHardware issue detected

Error Responses

StatusCodeDescription
400session_timeoutSession has expired
400cart_emptyCannot checkout empty cart
404device_not_foundKiosk not registered
409device_busyAnother session active
503device_offlineKiosk is offline

  • Kiosk User Guide - Kiosk setup guide
  • Kiosk Ordering - Customer experience
  • Orders API - Order management