Skip to main content

API de Integración — Restaurantero Pro

Versión: 1.0.4
Base URL: https://my.restauranteropro.com/api/v1
Formato: JSON (inspirado en JSON:API)
Autenticación: Header X-API-Key

1. Autenticación

Todos los endpoints requieren el header:
Las API Keys se generan en el panel de Restaurantero Pro por sucursal. Usa rpro_test_ durante las pruebas y rpro_live_ en producción.

Errores de autenticación

Verificar conexión — GET /api/v1/ping

Primer endpoint a llamar al configurar una integración nueva. Confirma que la API Key es válida y regresa información básica de la sucursal.
Response:
Campo subscription_status:
Todas las sucursales existentes tienen subscription_status: "active" hoy — este campo es informativo, sin ningún cliente afectado actualmente. Se recomienda llamar a /ping al iniciar sesión/turno y periódicamente durante el día (cada 15-30 min), no antes de cada venta individual.

2. Convenciones generales

Formato de requests y responses

Todos los requests y responses usan JSON con estructura JSON:API:

Dinero — siempre en centavos

Todos los campos monetarios son enteros que representan centavos. Nunca se envían decimales.

Fechas y horas

  • Fechas: YYYY-MM-DD
  • Timestamps: ISO 8601 con timezone: 2026-05-15T23:45:00-07:00
  • Hermosillo (sin cambio de horario): usar -07:00 todo el año

Idempotencia — obligatoria en todos los POST de ingesta

Todos los POST /api/v1/ingest/* requieren el header X-Idempotency-Key.
Para RC: Usa el identifier UUID del CashRegisterOpening como Idempotency Key.

3. Endpoints de Ingesta

Tu POS implementa estos endpoints. Tu sistema llama a estos endpoints para enviarnos datos. Nosotros los procesamos y generamos la inteligencia.

Orden correcto al cerrar un Corte Z


3.1 Corte de caja — POST /api/v1/ingest/cash-register

Registra un corte de caja. Tipos:
  • Corte X (xout): cierre de turno parcial — informativo
  • Corte Z (zout): cierre del día — trigger principal que procesa todos los cubos
Body del request:
cash_theoretical y cash_actual son opcionales pero recomendados. Sin ellos, Restaurantero Pro solo puede mostrar la diferencia (cash_variance) sin el desglose completo. La convención de signos es: cash_variance = cash_actual - cash_theoretical — negativo es faltante, positivo es sobrante.
Response exitoso 202 Accepted:
La respuesta es 202 Accepted — el procesamiento es asíncrono. Usa webhooks (snapshot.completed) para saber cuándo los datos están listos.

3.2 Ventas — POST /api/v1/ingest/sales

Body del request:

3.3 Pagos por método — POST /api/v1/ingest/payments

Tipos de pago estándar:

3.4 Líneas de orden — POST /api/v1/ingest/orders

Envía los productos vendidos. Cada línea genera una fila independiente para Top 10 productos, Star Employees y Ventas por categoría.
ordered_at está documentado pero hoy no llega poblado en producción. Es la hora exacta (hora, minuto, segundo) en que se ordenó ese producto — necesaria para el heatmap de ventas por hora del dashboard. Confirma en tu POS si ya capturas este dato internamente (por ejemplo, el created_at de la línea de orden) y empieza a incluirlo tal cual, en formato ISO 8601 con zona horaria. No es necesario un campo nuevo — este ya es el contrato oficial.

3.5 Catálogo de platillos — POST /api/v1/ingest/catalog

Sincroniza el catálogo completo del POS con Restaurantero Pro. Usa upsert por item_identifier o item_sku.
Este endpoint se llama una vez al inicio de la integración y luego cada vez que cambie el catálogo. La forma recomendada es un ItemObserver en RC que dispare el envío automáticamente.
Integración Bakery Pro: Sincroniza las categorías PRIMERO usando POST /api/v1/ingest/categories (sección 3.6) antes de enviar productos. RC Express necesita las categorías para generar el identification correctamente.
Cuándo enviar el catálogo:
  • Al configurar la integración por primera vez
  • Cuando se crea un Item nuevo en RC
  • Cuando se modifica un Item (precio, nombre, categoría)
  • Cuando se desactiva un Item
Body del request:
Campos por item:
Si envías 5 o más items, los platillos que no vengan en el payload serán marcados automáticamente como inactive.
Response exitoso 200 OK:
Bakery Pro requiere el campo identification en el response. Por cada item creado, RC Express debe incluir el identification generado por makeIdentificationFromCategoryHierarchy(). Bakery Pro lo almacena como SKU visible del producto en reportes y etiquetas.
Mapeo desde RC para Carlos:
El precio en RC viene del trait Amountable — usa $item->unitPrice->amount (tipo unit_price) y $item->unitCost->amount (tipo unit_cost). Multiplica por 100 para convertir a centavos.

3.6 Categorías Bakery Pro — POST /api/v1/ingest/categories

Sincroniza las categorías del catálogo de Bakery Pro hacia RC Express.
Sincronizar categorías SIEMPRE antes que productos. RC Express necesita el category_id interno para calcular el identification del item. Si se sincronizan productos antes que categorías, el identification generado será incorrecto.
Cuándo enviar categorías:
  • Al configurar la integración por primera vez
  • Cuando se crea una categoría nueva en Bakery Pro
  • Cuando se renombra una categoría en Bakery Pro
Body del request:
Campos por categoría: Response exitoso 200 OK:
RC Express debe devolver el rc_express_id de cada categoría en el response. Bakery Pro lo necesita para mapear correctamente las categorías al sincronizar productos.
Mapeo desde Bakery Pro:

3.7 Descuentos — POST /api/v1/ingest/discounts


3.8 Cancelaciones — POST /api/v1/ingest/cancellations


4. Catálogo de errores


5. Checklist de integración

  • 1. API Key configuradaRESTAURANTERO_API_KEY en .env con prefijo rpro_live_
  • 2. Branch Identifier correcto — UUID de la sucursal en RESTAURANTERO_BRANCH_IDENTIFIER
  • 3. Categorías enviadas (Bakery Pro)POST /ingest/categories con todas las categorías activas ANTES de enviar productos
  • 4. Catálogo enviadoPOST /ingest/catalog con todos los platillos activos al iniciar la integración
  • 5. identification guardado — RC Express devuelve identification por item creado; Bakery Pro lo almacena como SKU
  • 6. ItemObserver configurado — El catálogo se actualiza automáticamente cuando cambia un Item en RC
  • 7. Corte Z detectado — El service se invoca cuando CashRegisterOpening es tipo zout y status completed
  • 8. Corte X no envía datos de negocio — Solo POST /ingest/cash-register con closing_type: "xout"
  • 9. Idempotency Keys únicos — Se usa el identifier del CashRegisterOpening como base con sufijos
  • 10. Montos en centavos — Todos los *_cents son integers, no decimales
  • 11. waiter_name incluido en cada línea — Requerido para Star Employees
  • 12. category_type correctofood, beverage, bar o other por línea
  • 13. Retry implementado — Al menos 3 intentos con backoff exponencial
  • 14. Logging activo — Cada POST exitoso y fallido queda en los logs de RC
  • 15. Orden de envío correcto — orders → discounts → cancellations → payments → sales → cash-register
  • 16. Prueba con key rpro_test_ — Enviar categorías + catálogo + 3 cortes Z de prueba

6. Flujo completo de integración

6.1 Flujo diario (restaurant_controller)

6.2 Snippet PHP completo


7. Webhooks


8. Módulo Live — Datos en tiempo real

Estos endpoints devuelven el estado actual del turno, no datos históricos. Se referenciaban en el flujo de integración (sección 6.1) pero no estaban documentados — corregido en esta versión.

8.1 Ventas del turno en curso

Response:
La comparación es siempre contra el mismo día de la semana anterior (ej. martes vs. martes pasado), nunca contra “ayer” — evita comparar un fin de semana contra un día entre semana.

8.2 Saldo de caja en tiempo real

Response:
Este endpoint no reemplaza el Corte Z — es una estimación en tiempo real basada en ventas registradas hasta el momento, no un arqueo físico.

8.3 Alertas del turno activo

Response:

8.4 Eventos de mesa en tiempo real — POST /api/v1/live/update

Endpoint opcional. Actívalo cuando quieras alimentar la vista “En vivo” del salón (mesas abiertas, qué llevan pedido, cuánto tiempo llevan) en el dashboard del dueño.
Body del request:
items siempre debe llevar la lista COMPLETA y ACTUAL de productos de la mesa — nunca solo el cambio. Restaurantero Pro reemplaza la lista completa con cada evento, no calcula diferencias.
Response:

10. Changelog

v1.0.5 — Julio 2026

  • Nueva Sección 8 — Módulo Live — documenta GET /live/sales/today, GET /live/cash/balance y GET /live/alerts/active, que ya estaban implementados y referenciados en el flujo de integración (6.1) pero nunca documentados con su forma de respuesta.
  • POST /api/v1/live/update — Nuevo endpoint opcional (sección 8.4) para eventos de mesa en tiempo real (apertura, productos, cierre). Alimenta la vista “En vivo” del dashboard.
  • Sección 3.1 (Corte de caja) — Agregados los tipos opcionales cash_theoretical y cash_actual al arreglo summaries, con la convención de signos documentada (cash_variance = cash_actual - cash_theoretical).
  • Sección 3.4 (Líneas de orden) — Aclarado que ordered_at es el campo oficial para la hora exacta del pedido (ya documentado desde antes, pero nunca llega poblado en producción) — no se agregó ningún campo nuevo para esto, evitando confundirlo con meta.sent_at (que tiene un significado distinto: hora de envío del payload completo).

v1.0.4 — Julio 2026

  • Sección 1 — Nueva sub-sección “Verificar conexión” — documenta GET /api/v1/ping, ausente hasta ahora en esta referencia aunque ya estaba en uso real por integradores.
  • Campo subscription_status agregado a la respuesta de /ping (active / suspended / blocked). Hoy informativo — todas las sucursales están en active, sin ningún cliente afectado. Documenta el comportamiento esperado del POS por cada valor.
  • integracion-rc.mdx — comando restaurantero:test actualizado para mostrar subscription_status en su tabla de verificación.

v1.0.3 — Junio 2026

  • POST /api/v1/ingest/categories — Nuevo endpoint (sección 3.6) para sincronizar categorías de Bakery Pro con RC Express. Soporta jerarquía padre/hijo via parent_identifier. RC Express debe devolver rc_express_id por categoría creada.
  • Sección 3.5 actualizada — Response de ingest/catalog ahora incluye array items con campo identification generado por RC Express para cada item nuevo. Requerido para Bakery Pro.
  • Checklist actualizado — Puntos 3, 4, 5 actualizados para incluir sync de categorías antes de productos.
  • Sección 3.6 (Descuentos) renumerada a 3.7 — Para dar lugar a la nueva sección 3.6 de categorías.

v1.0.2 — Mayo 2026

  • POST /api/v1/ingest/catalog — Nuevo endpoint para sincronizar el catálogo de platillos del POS.
  • Sección 3.5 — Documentación completa del endpoint de catálogo con mapeo desde RC.
  • Checklist — Actualizado a 14 puntos.

v1.0.1 — Mayo 2026

  • POST /api/v1/ingest/orders — Agregado campo waiter_name por línea.
  • Checklist — Actualizado a 13 puntos.

v1.0.0 — Mayo 2026

Release inicial de la API pública de Restaurantero Pro.
Restaurantero Pro — API Documentation v1.0.5
Desarrollado por Restaurant Controller · Hermosillo, Sonora, México
Julio 2026 · Confidencial — Solo para partners autorizados