v1 · REST + Webhooks

Documentación para desarrolladores

Crea apps para clientes, repartidores y comercios sobre una sola API. Lee y escribe restaurantes, menús, pedidos y repartidores; recibe eventos en tiempo real mediante webhooks firmados. Todo está limitado al ámbito del propietario del token.

🛍️ app de cliente 🛵 App de repartidores 🧑‍🍳 App de comercio

¿Desarrollando para el marketplace? Documentación para desarrolladores de apps →  ·  Documentación para desarrolladores de temas →

Nuevo nuestro servidor Dev MCP convierte cualquier herramienta de IA compatible con MCP en un experto de la plataforma. learn_platform lo prepara, get_liquid_reference le da la lista blanca autorizada y validate_theme ejecuta las propias comprobaciones del marketplace sobre su salida — el ciclo completo aprender → construir → validar sin salir de tu editor. Conecta con un solo comando →

Primeros pasos

Crea un token de API desde tu panel en Tokens de API y webhooks. Elige las read y/o write capacidades y copia el token — solo se muestra una vez.

URL base: https://www.menubarcode.com/api/v1

Una comprobación rápida de que tu token funciona:

curl https://www.menubarcode.com/api/v1/restaurants \
  -H "Authorization: Bearer YOUR_TOKEN"
La raíz GET https://www.menubarcode.com/api/v1 devuelve un índice legible por máquina de los endpoints disponibles (no requiere autenticación). Legible por máquina Especificación OpenAPI 3.1 (JSON) — generada a partir del router en vivo, por lo que siempre coincide con la API desplegada.

Autenticación

Envía tu token como cabecera Bearer en cada petición:

Authorization: Bearer YOUR_TOKEN

Para pruebas rápidas puedes pasar en su lugar ?api_token=YOUR_TOKEN como parámetro de consulta, pero se recomienda encarecidamente usar la cabecera para que los tokens nunca se filtren en los registros.

CapacidadConcesiones
readTodos GET endpoints (todos los recursos).
writeTodos los endpoints de modificación (y, al ser un superconjunto, todas las lecturas).

Tokens con ámbito

Más allá del genérico read/write, un token puede limitarse a recursos específicos con resource:action capacidades. Recursos: restaurants, menu, orders, customers, analytics, drivers, webhooks; Acciones read, write. Selecciónalos al crear el token en el panel.

Token de ejemploPuede hacer
["orders:write"]Leer + escribir solo pedidos (una integración de POS).
["menu:read"]Leer el menú; nada más.
["orders:read","analytics:read"]Un panel de informes.

Reglas de cobertura: * otorga todo; un :write ámbito también otorga su :read; genérico read/write se comportan como *:read / *:write. Una petición que carezca del ámbito requerido devuelve 403. Heredado read/write los tokens no se ven afectados.

Los tokens se cifran en reposo (SHA-256) y pueden llevar una caducidad opcional. Revoca cualquier token al instante desde el panel.

Límites de frecuencia

La API permite 120 peticiones por minuto por token. Superarlo devuelve 429 Too Many Requests con una Retry-After cabecera. Se incluyen cabeceras estándar de límite de tasa en cada respuesta:

X-RateLimit-Limit: 120
X-RateLimit-Remaining: 118

Errores

Cada error en una /api/v1 ruta devuelve códigos de estado HTTP convencionales y un único envoltorio JSON — un mensaje legible para humanos message, un valor estable legible por máquina code, y (en la validación) un desglose por campo errors Mapa

{ "message": "Invalid or expired token.", "code": "unauthenticated" }

{ "message": "The given data was invalid.",
  "code": "validation_failed",
  "errors": { "title": ["The title field is required."] } }
EstadocodeSignificado
401unauthenticatedToken ausente, no válido o caducado.
403forbiddenEl token carece de la capacidad/ámbito requerido.
404not_foundRecurso no encontrado o no pertenece al token.
422validation_failedFallo de validación (ver errors).
429rate_limitedLímite de tasa superado.
Analiza el valor legible por máquina code, no el legible para humanos message — los mensajes pueden reformularse o traducirse; los códigos son estables.
Solicitar un recurso que no te pertenece devuelve 404, no 403 — la API nunca confirma la existencia de datos de otro propietario.

Paginación

Los endpoints de lista devuelven envoltorios paginados al estilo de Laravel. Usa el ?page= parámetro de consulta para recorrer las páginas.

{
  "data": [ ... ],
  "current_page": 1,
  "last_page": 3,
  "per_page": 20,
  "total": 47
}

Leer restaurantes y menú

GET /restaurants

Lista los restaurantes del token, paginados (20 por página).

{
  "data": [
    { "id": 12, "title": "Nova Bistro", "slug": "nova-bistro",
      "url": "https://.../nova-bistro", "template": "linen",
      "created_at": "2026-06-01T10:22:00+00:00" }
  ],
  "current_page": 1, "last_page": 1, "total": 1
}
GET /restaurants/{id}

Un solo restaurante con sus categorías de menú y el número de artículos.

GET /restaurants/{id}/menu

El menú activo completo agrupado por categoría.

[
  { "id": 3, "name": "Starters",
    "items": [
      { "id": 88, "name": "Bruschetta", "price": 6.50,
        "is_sold_out": false, "is_popular": true, "is_vegan": true,
        "is_halal": true, "calories": 210 }
    ]
  }
]

Pedidos

GET /restaurants/{id}/orders

Pedidos, del más reciente al más antiguo, paginados (30/página). Filtra con ?status=.

GET /restaurants/{id}/orders/{orderId}

Detalle completo del pedido con líneas, extras, repartidor y cronología de entrega.

POST /restaurants/{id}/orders Escribir

Crea un pedido — así es como una app de cliente envía un carrito (el backend del comercio guarda el token). Cada artículo se valida contra el menú activo del restaurante; los artículos agotados o ajenos rechazan todo el pedido (422). Dispara order.created y devuelve el pedido completo, incluido su track_token.

curl -X POST https://www.menubarcode.com/api/v1/restaurants/12/orders \
  -H "Authorization: Bearer YOUR_TOKEN" -H "Content-Type: application/json" \
  -d '{
    "type": "delivery",
    "customer_name": "A. Idriss",
    "phone": "+15551234567",
    "address": "9 Cedar Road",
    "tip_amount": 3.00,
    "note": "Ring the bell",
    "source": "customer_app",
    "items": [
      { "item_id": 88, "quantity": 2, "variation": 5, "extras": [12], "note": "no onion" },
      { "item_id": 91, "quantity": 1 }
    ]
  }'

Pedido type es uno de on-table, takeaway, delivery. para on-table pasa table_number; para delivery pasa address.

Idempotencia. Envía una Idempotency-Key cabecera (o un cuerpo client_uuid) en cualquier llamada de creación de pedido. Reintentar con la misma clave devuelve el pedido original y nunca crea un duplicado — seguro ante respuestas perdidas y reenvíos sin conexión. Las claves tienen ámbito por restaurante.

PUT /restaurants/{id}/orders/{orderId}/status Escribir

Actualiza el estado de cocina (new|preparing|ready|delivered|completed|cancelled). Dispara order.status_changed.

API del sitio web (token por restaurante)

Una API pública independiente autenticada por un token de sitio web por restaurante enviado como X-Storefront-Token (no el token Bearer del propietario). Emítelos desde tu panel; cada token solo puede acceder a su propio restaurante. El ámbito de lectura es menu:read; para realizar pedidos se necesita el order:write Alcance

GET /storefront/menu

Menú completo del restaurante del token (variantes, extras, grupos, galería).

GET /storefront/restaurant

Información básica del restaurante del token.

POST /storefront/orders order:write

Envía un carrito en nombre de un comensal. Con precios calculados en el servidor y sin pagar (el comensal paga al recibir); takeaway o on-table únicamente. Cada artículo se valida contra el menú activo — los artículos agotados o ajenos rechazan todo el pedido (422). Límites: 40 artículos/pedido, 30 de cantidad/línea. Opcional coupon_code aplica un descuento del propietario en el servidor. Dispara order.created y devuelve track_token + continue_url.

curl -X POST https://www.menubarcode.com/api/v1/storefront/orders \
  -H "X-Storefront-Token: YOUR_STOREFRONT_TOKEN" -H "Content-Type: application/json" \
  -d '{
    "type": "takeaway",
    "customer_name": "A. Idriss",
    "phone": "+15551234567",
    "coupon_code": "WELCOME10",
    "items": [
      { "item_id": 88, "quantity": 2, "variation": 5, "extras": [12] },
      { "item_id": 91, "quantity": 1 }
    ]
  }'

Analíticas y clientes

GET /restaurants/{id}/analytics

Resumen de ventas en un rango de fechas (?from=YYYY-MM-DD&to=YYYY-MM-DD, por defecto, los últimos 30 días): número de pedidos por estado/tipo, ingresos brutos y pagados, valor medio del pedido y artículos más vendidos.

{
  "range": { "from": "2026-06-02", "to": "2026-07-02" },
  "orders": { "total": 214, "paid": 198, "by_status": {...}, "by_type": {...} },
  "revenue": { "gross": 8420.50, "paid": 7990.00, "avg_order_value": 39.35 },
  "top_items": [ { "item_id": 88, "name": "Margherita", "quantity": 143 } ]
}
GET /restaurants/{id}/customers

La lista de clientes del restaurante (CRM), paginada. Filtra con ?search=.

Gestionar repartidores Escribir

Los repartidores te pertenecen y (opcionalmente) a un restaurante. Crear o rotar un repartidor devuelve un token de repartidor sin cifrar exactamente una vez — entrégalo a la app del repartidor; se autentican con él (ver más abajo).

GET /drivers
POST /drivers
curl -X POST https://www.menubarcode.com/api/v1/drivers \
  -H "Authorization: Bearer YOUR_TOKEN" -H "Content-Type: application/json" \
  -d '{"name":"Alex","phone":"+15550001111","restaurant_id":12}'

# → { "id": 7, "name": "Alex", ..., "token": "RAW_DRIVER_TOKEN_SHOWN_ONCE" }
PUT /drivers/{id}
DELETE /drivers/{id}
POST /drivers/{id}/rotate-token

Invalida el token antiguo y devuelve uno nuevo.

Asigna y sigue una entrega

GET /restaurants/{id}/deliveries

Pedidos de entrega, filtrables por ?delivery_status= y ?driver_id=.

POST /restaurants/{id}/orders/{orderId}/assign Escribir

Asignar un repartidor {"driver_id": 7}. Establece delivery_status=assigned y dispara order.driver_assigned.

PUT /restaurants/{id}/orders/{orderId}/delivery-status Escribir

Sobrescribe la etapa de entrega: pending | assigned | picked_up | out_for_delivery | delivered | failed.

API de la app de repartidor

La app del repartidor se autentica con un Token de repartidor (no un token de propietario) emitido arriba. Ruta base https://www.menubarcode.com/api/v1/driver. Cada respuesta está limitada a ese único repartidor.

Authorization: Bearer RAW_DRIVER_TOKEN
GET /driver/me

El perfil del repartidor autenticado.

GET /driver/deliveries

Pedidos asignados a este repartidor. Añade ?active=1 para ocultar entregados/fallidos.

PUT /driver/deliveries/{orderId}/status

Avanza la entrega: {"delivery_status":"out_for_delivery"} luego "delivered" o "picked_up" / "failed", opcional note). Dispara los mismos webhooks que el endpoint del propietario.

PUT /driver/location

Envía la posición en vivo: {"lat":25.2048,"lng":55.2708}. Mostrada en la vista de seguimiento del cliente mientras está en reparto.

Cuentas de clientes

A app de cliente independiente autentica a sus propios usuarios con un token por cliente (estilo Sanctum: varios dispositivos, revocables individualmente). No interviene ningún token de propietario. Los clientes tienen ámbito por restaurante, así que la autenticación está bajo /restaurants/{id}/customer/…. Explora primero el menú con el endpoint público:

GET /menu/{restaurantId} Público

Menú activo agrupado por categoría (se omiten los artículos agotados). Sin autenticación.

Registrarse / iniciar sesión

POST /restaurants/{id}/customer/register
POST /restaurants/{id}/customer/login
curl -X POST https://www.menubarcode.com/api/v1/restaurants/12/customer/login \
  -H "Content-Type: application/json" \
  -d '{"email":"sam@example.com","password":"secret123","device":"iPhone 15"}'

# → { "token": "RAW_CUSTOMER_TOKEN", "customer": { "id": 42, "name": "Sam", ... } }

Sin contraseña (OTP por SMS)

POST /restaurants/{id}/customer/otp/request
POST /restaurants/{id}/customer/otp/verify

Solicita un código para un número de teléfono y luego verifícalo. La verificación busca o crea al cliente y devuelve un token. Los endpoints de autenticación tienen límite de tasa (inicio/registro 10/min, solicitud de OTP 6/min).

API de la app de cliente

Autentícate con el token de cliente. Ruta base https://www.menubarcode.com/api/v1/customer. Todo está limitado al cliente autenticado — el cuerpo del pedido nunca puede suplantar el id de otro cliente.

Authorization: Bearer RAW_CUSTOMER_TOKEN
GET /customer/me
PUT /customer/me

Lectura / actualización del perfil (nombre, correo, teléfono, cumpleaños, consentimientos).

POST /customer/orders

Realiza un pedido como este cliente (mismo formato de artículo que el endpoint de creación del comercio; la identidad se toma del token). Devuelve el pedido con su track_token.

GET /customer/orders

El historial de pedidos del propio cliente, paginado.

GET /customer/addresses
POST /customer/addresses
DELETE /customer/addresses/{id}

Direcciones de entrega guardadas (la primera pasa a ser la predeterminada; admite lat/lng).

POST /customer/logout

Revoca el token usado en la petición (solo ese dispositivo).

Seguimiento de pedidos Público

Sin autenticación — el acceso se controla mediante el track_token impredecible del pedido (devuelto al crear el pedido). Esto alimenta una app de cliente pantalla de seguimiento en vivo.

GET /track/{token}
{
  "id": 5501, "status": "preparing", "delivery_status": "out_for_delivery",
  "is_paid": true, "total": 42.00,
  "timeline": { "preparing_at": "...", "out_for_delivery_at": "..." },
  "items": [ { "name": "Margherita", "quantity": 2 } ],
  "driver": { "name": "Alex", "lat": 25.2, "lng": 55.27, "location_updated_at": "..." }
}

El bloque del repartidor (con coordenadas en vivo) aparece solo una vez que el pedido se ha recogido / está en reparto.

Acceso del personal

A app del personal (POS / KDS / camarero) autentica a cada miembro del personal con un token por empleado. Dos vías reflejan el panel: correo + contraseña, o un PIN numérico rápido para tablets de cocina compartidas. El personal tiene ámbito por restaurante.

POST /restaurants/{id}/staff/login
POST /restaurants/{id}/staff/pin
curl -X POST https://www.menubarcode.com/api/v1/restaurants/12/staff/pin \
  -H "Content-Type: application/json" -d '{"pin":"4321","device":"Kitchen iPad"}'

# → { "token": "RAW_STAFF_TOKEN",
#     "staff": { "id": 3, "role": "kitchen", "permissions": ["kds"] } }

La respuesta lista los permisos efectivos del miembro del personal Permisos — un subconjunto de orders, menu_edit, coupons, analytics, kds, customers derivados de su rol (gerente / cajero / cocina / camarero) más cualquier anulación por empleado. Los endpoints están protegidos por permisos (403 en caso contrario).

API de la app del personal

Autentícate con el token de personal. Ruta base https://www.menubarcode.com/api/v1/staff. Todas las acciones están limitadas al restaurante del miembro del personal.

Authorization: Bearer RAW_STAFF_TOKEN
GET /staff/me

Perfil con rol y lista de permisos.

GET /staff/orders orders
PUT /staff/orders/{orderId}/status orders

Lista pedidos y actualiza el estado de cocina. Requiere el permiso orders permiso.

GET /staff/kds kds

Tickets de cocina en vivo agrupados por pedido, filtrados por la estación del miembro del personal (o ?station_id=). Muestra solo los artículos aún queued|preparing|ready.

PUT /staff/kds/items/{itemId}/bump kds
PUT /staff/kds/items/{itemId}/recall kds

Avanza (queued → preparing → ready → served) o retrocede un estado de KDS. El estado del pedido principal se resincroniza automáticamente.

POST /staff/menu/items menu_edit
PUT /staff/menu/items/{itemId} menu_edit
DELETE /staff/menu/items/{itemId} menu_edit
PATCH /staff/menu/items/{itemId}/sold-out menu_edit
POST /staff/menu/categories menu_edit

Edita el menú desde el local (gerentes). Mismos payloads que los endpoints de menú del comercio, limitados al restaurante del miembro del personal.

GET /staff/analytics analytics

Resumen de ventas del restaurante del miembro del personal (mismo formato que el endpoint de analíticas del comercio; ?from=&to=).

POST /staff/logout

Revoca el token de este dispositivo.

Webhooks — configuración

Registra endpoints desde el panel en Tokens de API y webhooks. Elige qué eventos recibe cada endpoint. Al guardar obtienes, por endpoint, un Secreto de firma; usa el Probar botón para enviar un ping. Pausa un endpoint para detener la entrega sin perder su secreto.

Tu endpoint debería responder con un 2xx estado rápidamente (en menos de 10 s). Cualquier otro estado — o un tiempo de espera agotado — se trata como un fallo y se reintenta.

Los endpoints también se pueden gestionar programáticamente (para REST-Hooks de Zapier/Make) con un webhooks:write token:

GET    /api/v1/webhook-endpoints            # list your endpoints
POST   /api/v1/webhook-endpoints            # {"url":"https://…","events":["order.created"]} → 201 {id, secret, …}
DELETE /api/v1/webhook-endpoints/{id}       # unsubscribe → 204

El secret se devuelve solo al crear — guárdalo para verificar la firma. url debe ser un endpoint HTTPS público (protegido contra SSRF); events debe estar en la lista de abajo (o *).

Eventos de webhook

EventoSe dispara cuando
order.createdSe realiza un nuevo pedido (panel o API).
order.status_changedCambia el estado de cocina de un pedido (panel, POS o API).
order.paidUn pedido se marca como totalmente pagado (pasarela o cuenta dividida).
order.driver_assignedSe asigna un repartidor a una entrega.
order.out_for_deliveryEl repartidor va de camino al cliente.
order.deliveredLa entrega se completó.
order.delivery_failedLa entrega no se pudo completar.
refund.completedSe completa un reembolso de un pedido.
reservation.createdSe crea una reserva de mesa.
reservation.cancelledSe cancela una reserva de mesa.
customer.createdSe crea un nuevo registro de cliente.
shift.openedSe abre un turno de caja / TPV.
shift.closedSe cierra un turno de caja / TPV.
menu.updatedSe crea, actualiza o elimina un artículo de menú o una categoría (en cualquier superficie). Payload: {restaurant_id, change, entity, id}.
entitlement.changedSe concede o revoca el derecho a una función para el espacio de trabajo (cambio de plan, complemento, instalación/desinstalación de app, anulación de administrador). Payload: {action, feature_key, source_type, source_id, user_id, occurred_at} donde action es granted o revoked.
subscription.*Ciclo de vida de la suscripción: subscription.paused, .resumed, .renewed, .expired, .plan_changed, .past_due, .expiring, .trial_ending.
app.uninstalledSe desinstala una app del marketplace (entregado al endpoint de la app).
*Suscríbete a todos los eventos anteriores.
pingEnviado por el Probar botón para verificar la conexión.

¿Falló una entrega mientras tu endpoint estaba caído? Usa Reenviar en cualquier fila del registro de entregas recientes del panel para volver a encolarla con un nuevo webhook-id.

Payload del webhook

Cada entrega es un POST con este envoltorio JSON y estas cabeceras:

POST /your-endpoint HTTP/1.1
Content-Type: application/json
webhook-id: msg_a1b2c3d4e5f6g7h8i9j0k1l2
webhook-timestamp: 1751472240
webhook-signature: v1,K5f...base64...==
X-Webhook-Event: order.created          (legacy)
X-Webhook-Signature: 9a3f...hex...      (legacy, HMAC of body only)

{
  "id": "msg_a1b2c3d4e5f6g7h8i9j0k1l2",
  "event": "order.created",
  "created_at": "2026-07-02T18:04:00+00:00",
  "data": { "order_id": 5501, "total": "42.00" }
}

El id es único por entrega. Como los reintentos reutilizan el mismo id, úsalo para que tu manejador sea idempotente.

Verificar la firma

El webhook-signature cabecera es un HMAC-SHA256, codificado en base64, calculado sobre {id}.{timestamp}.{body} usando el secreto de firma de tu endpoint. Vincular el id y la marca de tiempo a la firma es lo que hace que una petición capturada sea segura frente a reenvíos. Rechaza cualquier petición cuya webhook-timestamp tenga más de ~5 minutos de antigüedad.

PHP

$secret  = 'whsec_from_dashboard';
$id      = $_SERVER['HTTP_WEBHOOK_ID'];
$ts      = $_SERVER['HTTP_WEBHOOK_TIMESTAMP'];
$body    = file_get_contents('php://input');
$sent    = explode(',', $_SERVER['HTTP_WEBHOOK_SIGNATURE'])[1] ?? '';

if (abs(time() - (int) $ts) > 300) { http_response_code(400); exit; }

$expected = base64_encode(hash_hmac('sha256', "$id.$ts.$body", $secret, true));
if (!hash_equals($expected, $sent)) { http_response_code(401); exit; }

// verified — process $body
http_response_code(200);

Node.js

const crypto = require('crypto');

function verify(req, secret) {
  const id  = req.headers['webhook-id'];
  const ts  = req.headers['webhook-timestamp'];
  const sig = (req.headers['webhook-signature'] || '').split(',')[1];
  if (Math.abs(Date.now() / 1000 - Number(ts)) > 300) return false;

  const expected = crypto
    .createHmac('sha256', secret)
    .update(`${id}.${ts}.${req.rawBody}`)
    .digest('base64');

  return crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(sig || ''));
}
una X-Webhook-Signature cabecera heredada (HMAC-SHA256 simple del cuerpo, en hex) también se envía por compatibilidad. Las nuevas integraciones deberían usar webhook-signature.

Reintentos y registro de entregas

La entrega es asíncrona y se reintenta en caso de fallo con retroceso exponencial más jitter: aproximadamente 1m → 5m → 15m → 1h (hasta 5 intentos en total). Cada intento — con éxito o fallido — se registra en el registro de entregas de tu panel con su estado HTTP, número de intento y fragmento de respuesta.

La entrega es al menos una vez. Deduplica por el webhook-id para gestionar repeticiones ocasionales.

Servidores MCP

Nuevo una guía de configuración de una sola página, lista para copiar y pegar, para cada cliente está en /mcp — comandos de instalación por cliente, deeplinks con un solo clic, el catálogo de herramientas y prompts de ejemplo. Esta página sigue siendo la referencia detallada.

Cinco servidores Model Context Protocol conectan a los agentes de IA (ChatGPT, Claude, Cursor) con la plataforma — elige el que se ajuste a tu audiencia. Todos hablan JSON-RPC 2.0 sobre HTTP y negocian versiones de protocolo 2024-11-05 / 2025-03-26 / 2025-06-18.

ServidorEndpointAudienciaAutenticaciónHerramientas
Adminhttps://www.menubarcode.com/mcpPropietarios de tiendas — gestiona la tiendaToken de API (Bearer)23
Storefronthttps://www.menubarcode.com/mcp/storefrontEl agente de un comensal — compra y pide en una tiendaToken de tienda (ámbito de agente)12
Customerhttps://www.menubarcode.com/mcp/customerUn comensal con sesión iniciada — sus propios pedidosToken de cliente (inicio de sesión con OTP)5
Cataloghttps://www.menubarcode.com/mcp/catalogCualquiera — descubre tiendas de toda la plataformaPúblico3
Devhttps://www.menubarcode.com/mcp/devHerramientas de IA para programar — crea temas/integracionesPúblico7

Inicio rápido: ir a Admin, Catalog, Customer, o Dev. El servidor del sitio web comparte el patrón de conexión de Admin con una X-Storefront-Token cabecera en lugar de un token Bearer.

Servidor MCP (Admin)

Un cliente de IA compatible con MCP (Claude, ChatGPT, Cursor) puede operar tu restaurante en lenguaje natural usando los mismos tokens de API. Apúntalo a:

POST https://www.menubarcode.com/mcp JSON-RPC 2.0

Autentícate con Authorization: Bearer YOUR_TOKEN. Cada herramienta declara la capacidad granular que necesita (resource:action); una read el token cubre todas :read las herramientas y write lo cubre todo. Todas las llamadas están limitadas a tus restaurantes y con límite de tasa. Las herramientas para las que no tienes la capacidad se ocultan de tools/list.

Conectar (Claude Code)

claude mcp add --transport http platform-admin https://www.menubarcode.com/mcp \
  --header "Authorization: Bearer YOUR_TOKEN"

Listar herramientas

curl -X POST https://www.menubarcode.com/mcp \
  -H "Authorization: Bearer YOUR_TOKEN" -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

Llamar a una herramienta (p. ej. añadir un artículo de menú)

curl -X POST https://www.menubarcode.com/mcp \
  -H "Authorization: Bearer YOUR_TOKEN" -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":2,"method":"tools/call",
       "params":{"name":"add_menu_item",
                 "arguments":{"restaurant_id":12,"name":"Latte","price":4.5}}}'

Herramientas

HerramientaCapacidadQué hace
list_restaurantsreadRestaurantes de tu propiedad.
get_menureadLas categorías y artículos de un restaurante.
list_categoriesmenu:readCategorías con el número de artículos.
add_categorymenu:writeCrear una categoría.
update_categorymenu:writeRenombrar / reordenar una categoría.
delete_categorymenu:writeEliminar una categoría (se rechaza si tiene artículos).
add_menu_itemwriteCrear un artículo de menú (se comprueba el límite del plan).
update_menu_itemwriteEdita el nombre/precio/descripción de un artículo.
delete_menu_itemmenu:writeElimina un artículo de forma permanente.
set_item_availabilitymenu:writeMarcar un artículo como disponible/agotado (interruptor 86).
list_ordersorders:readPedidos del más reciente al más antiguo; filtros de estado/fecha/búsqueda.
get_orderorders:readDetalle completo del pedido, incl. las líneas.
update_order_statuswriteAvanzar el estado de cocina de un pedido.
list_customerscustomers:read + crm_suiteLista de CRM; buscar por nombre/teléfono/correo. Oculto de tools/list sin el derecho correspondiente.
get_customercustomers:read + crm_suiteEl registro completo de un cliente. Oculto de tools/list sin el derecho correspondiente.
sales_reportanalytics:readIngresos + número de pedidos + artículos más vendidos para un rango.
get_restaurant_settingsrestaurants:readInstantánea del perfil y la configuración de pedidos.
update_business_hoursrestaurants:writeEstablece el texto del horario comercial.
list_couponsorders:readTus cupones de descuento.
create_couponorders:writeCrea un cupón porcentual/fijo.
update_couponorders:writeEdita un cupón.
delete_couponorders:writeElimina un cupón.

Catalog MCP (descubrir restaurantes)

Un servidor MCP público de solo lectura que permite a los agentes de IA descubrir restaurantes y platos en toda la plataforma, y luego enlazar directamente a una tienda concreta para pedir. Sin autenticación, con límite de tasa.

POST https://www.menubarcode.com/mcp/catalog JSON-RPC 2.0 · public

Conectar (Claude Code)

claude mcp add --transport http platform-catalog https://www.menubarcode.com/mcp/catalog
HerramientaQué hace
search_storesEncuentra restaurantes por palabra clave/ciudad (nombre, dirección, menu_url, pista storefront_mcp).
search_itemsEncuentra platos en todas las tiendas (consulta/dieta/precio máx./ciudad), agrupados por tienda.
get_storeDetalle público completo de una tienda por slug o id.
list_starter_menusLas plantillas de menú inicial incluidas a partir de las cuales puede arrancar una tienda nueva (cafetería, pizzería, hamburguesería, panadería, lounge).

Solo aparecen las tiendas activas y listadas públicamente; los propietarios pueden excluirse en los ajustes de su tienda. Nunca se devuelven datos de contacto del propietario. Para realizar un pedido, usa el MCP del sitio web con un token de agente por tienda.

Customer Account MCP

Permite al asistente de IA de un comensal leer, seguir y volver a pedir sus propios pedidos. Autenticado por un token por cliente del inicio de sesión OTP existente; la identidad del cliente proviene únicamente del token — nunca se acepta un teléfono o id de cliente como argumento.

POST https://www.menubarcode.com/mcp/customer JSON-RPC 2.0 · customer token

Obtener un token (flujo OTP)

# 1) request a one-time code (sent to the customer's phone)
curl -X POST https://www.menubarcode.com/api/v1/restaurants/12/customer/otp/request \
  -H "Content-Type: application/json" -d '{"phone":"+15551234567"}'

# 2) verify the code → returns a customer bearer token
curl -X POST https://www.menubarcode.com/api/v1/restaurants/12/customer/otp/verify \
  -H "Content-Type: application/json" -d '{"phone":"+15551234567","code":"123456"}'

Conectar (Claude Code)

claude mcp add --transport http my-orders https://www.menubarcode.com/mcp/customer \
  --header "Authorization: Bearer CUSTOMER_TOKEN"
HerramientaQué hace
my_ordersTus pedidos recientes (del más reciente al más antiguo).
order_detailDetalle completo + líneas de uno de tus pedidos.
track_orderEstado en vivo por id de pedido o token de seguimiento.
reorderReconstruye un pedido pasado como borrador de carrito (omite los artículos agotados).
my_profileTu nombre, teléfono y número de pedidos.
my_bookingsTus propias reservas de habitación de hotel en este lugar (código, estado, fechas, tipo de habitación, total).
curl -X POST https://www.menubarcode.com/mcp/customer \
  -H "Authorization: Bearer CUSTOMER_TOKEN" -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call",
       "params":{"name":"my_orders","arguments":{"limit":5}}}'

Conecta tu editor de IA

¿Creando un tema o una integración con Claude Code, Cursor o VS Code? Apúntalo al servidor Dev MCP — tu herramienta de IA obtiene documentación de la plataforma en vivo, la lista blanca de Liquid generada y validación de temas en el servidor. No se necesita token.

POST https://www.menubarcode.com/mcp/dev JSON-RPC 2.0 · public

Claude Code

claude mcp add --transport http platform-dev https://www.menubarcode.com/mcp/dev

Cursor.cursor/mcp.json

{ "mcpServers": { "platform-dev": { "url": "https://www.menubarcode.com/mcp/dev" } } }

VS Code.vscode/mcp.json

{ "servers": { "platform-dev": { "type": "http", "url": "https://www.menubarcode.com/mcp/dev" } } }

Herramientas learn_platform (empieza aquí), search_docs / fetch_full_doc, get_liquid_reference, get_section_schema, validate_theme, list_webhook_events. Flujo de trabajo recomendado para agentes: aprender → construir → validar → entregar.

El servidor MCP autenticado de arriba (https://www.menubarcode.com/mcp) opera con los datos de tu restaurante; este sirve documentación y validación, y es seguro para compartir públicamente.

Registro de cambios

FechaCambiar
2026-08-20Versión de PMS de hotel + crecimiento: refund.completed, reservation.created, reservation.cancelled, customer.created, shift.opened, shift.closed eventos de webhook; registro de dispositivos push del personal + 2fa endpoints; nuevas herramientas MCP hotel_availability, my_bookings, list_starter_menus, list_webhook_events.
2026-07-28Índice de descubrimiento generado por el router + Especificación OpenAPI 3.1 (siempre en paridad con la API desplegada); Idempotency-Key al crear pedidos; límites de tasa de la API por token; subscription.* + app.uninstalled eventos de webhook + entrega Reenviar.
2026-07-07Público servidor Dev MCP para herramientas de IA de programación: búsqueda en documentación en vivo, referencia de Liquid generada, validación de temas en el servidor.
2026-07-02Ámbitos de token granulares (resource:action); endpoints de edición de menú y analíticas del personal.
2026-07-02App del personal: autenticación con token por empleado (contraseña + PIN), control por rol y permiso, estado de pedidos, avance/retroceso de KDS.
2026-07-02App de cliente independiente: autenticación con token por cliente (registro/inicio de sesión/OTP), perfil, realización de pedidos + historial, direcciones guardadas, exploración del menú público.
2026-07-02API de gestión completa: CRUD de menú, creación de pedidos, repartidores + ciclo de vida de la entrega, API de token de la app de repartidor, seguimiento público de pedidos, analíticas de ventas, clientes. Nuevos eventos de webhook de entrega.
2026-07-02Entrega de webhooks en cola con reintentos; firma con Standard-Webhooks (webhook-id/timestamp/signature); order.paid evento; documentación pública.
2026-06-26API REST v1 inicial, tokens y endpoints de webhook.

Volver a Menubarcode

Menubarcode API v1 · URL base https://www.menubarcode.com/api/v1

Contáctanos

Síguenos