Saltar a contenido

Cliente · Menú y QR

Esta área expone la cara pública (cliente) del catálogo: lo que ve quien escanea el QR de la mesa. A partir del slug del restaurante (o, por retrocompatibilidad, su id numérico) devuelve el menú completo —categorías con sus productos disponibles, extras de pago y grupos de opciones— y el detalle ampliado de un producto concreto (alérgenos, perfil de sabor, maridajes, descripción de IA). Es de solo lectura: aquí no se crean pedidos; eso vive en el dominio de carrito y comanda.

Estos endpoints son públicos y sin autenticación: no requieren JWT ni cabeceras de acceso. La multitenancy se resuelve por la ruta (el slug/id del restaurante en el path), no por la sesión del cliente; nunca se confía en un restaurant_id del body. Los campos traducibles (name, description…) se resuelven a un idioma mediante el parámetro de query ?lang= (por defecto es, con fallback a es y luego al primer idioma disponible). Los precios viajan en céntimos enteros (price) más su versión formateada con divisa (price_formatted).

Caché y consistencia

La respuesta del menú completo se cachea por (restaurant_id, lang). Las mutaciones desde la API de administración invalidan esa caché, así que los cambios de carta se reflejan en cuanto se propaga la invalidación. No hay paginación en esta superficie: el menú se entrega entero en una sola respuesta.

Para entender el modelo de datos detrás de estos endpoints —la jerarquía Menu → Category → Product, la diferencia entre extras y grupos de opciones, el i18n por diccionarios y los precios en céntimos— consulta Menú y catálogo. El QR y la mesa que originan la sesión del cliente se describen en Restaurante y mesas. Para la visión general de la API y sus convenciones, ver Referencia API.

Generado automáticamente

Las tablas y fichas de endpoints de esta página se generan desde el contrato OpenAPI. No las edites a mano; edita la intro en documentation/reference/api/_intros/cliente-menu.md y regenera con python scripts/gen_openapi_reference.py.

Resumen de endpoints

Método Ruta Resumen Auth
GET /api/v1/products/{product_id} Get Public Product Pública
GET /api/v1/restaurants/{slug}/menu Get Public Menu Pública
GET /api/v1/tables/{qr_code} Get Table By Qr Pública

Detalle

GET /api/v1/products/{product_id}

Get Public Product

Get product details by ID (customer-facing).

  • Auth: Pública
  • Parámetros: product_id (path, requerido)
  • Respuestas: 200 ProductDetailResponse, 422 HTTPValidationError

GET /api/v1/restaurants/{slug}/menu

Get Public Menu

Get full menu for a restaurant (customer-facing), keyed by slug.

  • Auth: Pública
  • Parámetros: slug (path, requerido), lang (query, opcional)
  • Respuestas: 200 MenuResponse, 422 HTTPValidationError

GET /api/v1/tables/{qr_code}

Get Table By Qr

Get table info by QR code.

  • Auth: Pública
  • Parámetros: qr_code (path, requerido)
  • Respuestas: 200 TableResponse, 422 HTTPValidationError