v1 · REST + Webhooks

Documentação para desenvolvedores

Crie apps para clientes, entregadores e lojistas em uma única API. Leia e grave restaurantes, menus, pedidos e entregadores; receba eventos em tempo real por webhooks assinados. Tudo é limitado ao escopo do dono do token.

🛍️ app do cliente 🛵 App do entregador 🧑‍🍳 App do lojista

Desenvolvendo para o marketplace? Documentação para programadores de apps →  ·  Documentação para desenvolvedores de temas →

Novo nosso servidor MCP Dev transforma qualquer ferramenta de IA compatível com MCP em um especialista da plataforma. learn_platform prepara a ferramenta, get_liquid_reference fornece a whitelist oficial e validate_theme executa as próprias verificações do marketplace na saída — todo o ciclo aprender → construir → validar sem sair do seu editor. Conecte em um comando →

Primeiros passos

Crie um token de API no seu painel em Tokens de API e webhooks. Escolha as read e/ou write habilidades e copie o token — ele é exibido apenas uma vez.

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

Uma verificação rápida de que seu token funciona:

curl https://mail.menubarcode.com/api/v1/restaurants \
  -H "Authorization: Bearer YOUR_TOKEN"
A raiz GET https://mail.menubarcode.com/api/v1 retorna um índice legível por máquina dos endpoints disponíveis (não requer autenticação). Legível por máquina Especificação OpenAPI 3.1 (JSON) — gerada a partir do roteador ativo, então sempre corresponde à API implantada.

Autenticação

Envie seu token como um cabeçalho Bearer em cada requisição:

Authorization: Bearer YOUR_TOKEN

Para testes rápidos, você pode passar ?api_token=YOUR_TOKEN como parâmetro de consulta, mas o cabeçalho é fortemente preferido para que os tokens nunca vazem nos logs.

HabilidadeConcessões
readTodos GET endpoints (todos os recursos).
writeTodos os endpoints de escrita (e, sendo um superconjunto, todas as leituras).

Tokens com escopo

Além do escopo amplo read/write, um token pode ser limitado a recursos específicos com resource:action habilidades. Recursos: restaurants, menu, orders, customers, analytics, drivers, webhooks; Ações read, write. Selecione-os ao criar o token no painel.

Token de exemploPode fazer
["orders:write"]Ler + gravar apenas pedidos (uma integração de POS).
["menu:read"]Ler o menu; nada mais.
["orders:read","analytics:read"]Um painel de relatórios.

Regras de cobertura: * concede tudo; um :write escopo também concede seu :read; amplo read/write comportam-se como *:read / *:write. Uma requisição sem o escopo necessário retorna 403. Legado read/write os tokens não são afetados.

Os tokens são armazenados com hash (SHA-256) e podem ter uma expiração opcional. Revogue qualquer token instantaneamente pelo painel.

Limites de taxa

A API permite 120 requisições por minuto por token. Exceder esse limite retorna 429 Too Many Requests com um Retry-After cabeçalho. Cabeçalhos padrão de limite de taxa são incluídos em cada resposta:

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

Erros

Todo erro em uma /api/v1 rota retorna códigos de status HTTP convencionais e um único envelope JSON — um message, um estável, legível por máquina code, e (na validação) um 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, inválido ou expirado.
403forbiddenO token não tem a habilidade/escopo necessário.
404not_foundRecurso não encontrado ou não pertence ao token.
422validation_failedFalha na validação (veja errors).
429rate_limitedLimite de taxa excedido.
Analise o legível por máquina code, não o legível por humanos message — as mensagens podem ser reescritas ou localizadas; os códigos são estáveis.
Solicitar um recurso que você não possui retorna 404, não 403 — a API nunca confirma a existência dos dados de outro proprietário.

Paginação

Os endpoints de listagem retornam envelopes paginados no estilo Laravel. Use o ?page= parâmetro de consulta para navegar pelas páginas.

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

Ler restaurantes e menu

GET /restaurants

Lista os restaurantes pertencentes ao 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}

Um único restaurante com suas categorias de menu e contagem de itens.

GET /restaurants/{id}/menu

O menu ativo completo agrupado por categoria.

[
  { "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, mais recentes primeiro, paginados (30/página). Filtre com ?status=.

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

Detalhe completo do pedido com itens, adicionais, entregador e linha do tempo da entrega.

POST /restaurants/{id}/orders Escrever

Cria um pedido — é assim que um app do cliente envia um carrinho (o backend do lojista guarda o token). Cada item é validado contra o menu ativo do restaurante; itens esgotados ou de outro restaurante rejeitam o pedido inteiro (422). Dispara order.created e retorna o pedido completo, incluindo seu track_token.

curl -X POST https://mail.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 é um de on-table, takeaway, delivery. para on-table passe table_number; para delivery passe address.

Idempotência. Envie um Idempotency-Key cabeçalho (ou um corpo client_uuid) em qualquer chamada de criação de pedido. Repetir com a mesma chave retorna o pedido original e nunca cria uma duplicata — seguro para respostas perdidas e reenvio offline. As chaves têm escopo por restaurante.

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

Atualiza o status da cozinha (new|preparing|ready|delivered|completed|cancelled). Dispara order.status_changed.

API da vitrine (token por restaurante)

Uma API pública separada, autenticada por um token de vitrine por restaurante enviado como X-Storefront-Token (não o token Bearer do proprietário). Emita-os pelo seu painel; cada token só pode acessar seu próprio restaurante. O escopo de leitura é menu:read; fazer pedidos exige o order:write Escopo

GET /storefront/menu

Menu completo do restaurante do token (variantes, adicionais, grupos, galeria).

GET /storefront/restaurant

Informações básicas do restaurante do token.

POST /storefront/orders order:write

Envia um carrinho em nome de um cliente. Precificado no servidor e não pago (o cliente paga na chegada); takeaway ou on-table apenas. Cada item é validado contra o menu ativo — itens esgotados ou de outro restaurante rejeitam o pedido inteiro (422). Limites: 40 itens/pedido, 30 de quantidade/linha. Opcional coupon_code aplica um desconto do proprietário no servidor. Dispara order.created e retorna track_token + continue_url.

curl -X POST https://mail.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 }
    ]
  }'

Analytics e clientes

GET /restaurants/{id}/analytics

Resumo de vendas em um intervalo de datas (?from=YYYY-MM-DD&to=YYYY-MM-DD, padrão: últimos 30 dias): contagem de pedidos por status/tipo, receita bruta e paga, valor médio do pedido e itens mais 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

A lista de clientes do restaurante (CRM), paginada. Filtre com ?search=.

Gerenciar entregadores Escrever

Os entregadores pertencem a você e (opcionalmente) a um restaurante. Criar ou rotacionar um entregador retorna um token de entregador exatamente uma vez — entregue-o ao app do entregador; eles se autenticam com ele (veja abaixo).

GET /drivers
POST /drivers
curl -X POST https://mail.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 o token antigo e retorna um novo.

Atribuir e rastrear uma entrega

GET /restaurants/{id}/deliveries

Pedidos de entrega, filtráveis por ?delivery_status= e ?driver_id=.

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

Atribuir um entregador {"driver_id": 7}. Define delivery_status=assigned e dispara order.driver_assigned.

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

Substitua a etapa da entrega: pending | assigned | picked_up | out_for_delivery | delivered | failed.

API do app do entregador

O app do entregador se autentica com um Token de entregador (não um token de proprietário) emitido acima. Caminho base https://mail.menubarcode.com/api/v1/driver. Cada resposta tem escopo limitado a esse único entregador.

Authorization: Bearer RAW_DRIVER_TOKEN
GET /driver/me

O perfil do entregador autenticado.

GET /driver/deliveries

Pedidos atribuídos a este entregador. Adicione ?active=1 para ocultar entregues/falhados.

PUT /driver/deliveries/{orderId}/status

Avance a entrega: {"delivery_status":"out_for_delivery"} depois "delivered" ou "picked_up" / "failed", opcional note). Dispara os mesmos webhooks que o endpoint do proprietário.

PUT /driver/location

Envie a posição em tempo real: {"lat":25.2048,"lng":55.2708}. Exibida na tela de rastreamento do cliente enquanto está em rota de entrega.

Contas de clientes

A app de cliente independente autentica seus próprios usuários com um token por cliente (estilo Sanctum: vários dispositivos, revogáveis individualmente). Nenhum token de proprietário está envolvido. Os clientes têm escopo por restaurante, então a autenticação fica em /restaurants/{id}/customer/…. Explore o menu primeiro com o endpoint público:

GET /menu/{restaurantId} Público

Menu ativo agrupado por categoria (itens esgotados omitidos). Sem autenticação.

Registrar / entrar

POST /restaurants/{id}/customer/register
POST /restaurants/{id}/customer/login
curl -X POST https://mail.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", ... } }

Sem senha (SMS OTP)

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

Solicite um código para um número de telefone e depois verifique-o. A verificação encontra ou cria o cliente e retorna um token. Os endpoints de autenticação têm limite de taxa (login/registro 10/min, solicitação de OTP 6/min).

API do app do cliente

Autentique com o token do cliente. Caminho base https://mail.menubarcode.com/api/v1/customer. Tudo tem escopo limitado ao cliente autenticado — o corpo do pedido nunca pode falsificar o id de outro cliente.

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

Leitura / atualização de perfil (nome, e-mail, telefone, aniversário, consentimentos).

POST /customer/orders

Faça um pedido como este cliente (mesmo formato de item do endpoint de criação do lojista; a identidade vem do token). Retorna o pedido com seu track_token.

GET /customer/orders

O histórico de pedidos do próprio cliente, paginado.

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

Endereços de entrega salvos (o primeiro se torna padrão; suporta lat/lng).

POST /customer/logout

Revoga o token usado na requisição (apenas esse dispositivo).

Rastreamento de pedidos Público

Sem autenticação — o acesso é controlado pelo imprevisível track_token (retornado quando o pedido é criado). Isso alimenta uma app do cliente tela de rastreamento ao 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": "..." }
}

O bloco do entregador (com coordenadas em tempo real) só aparece depois que o pedido é retirado / sai para entrega.

Login da equipe

A app da equipe (POS / KDS / garçom) autentica cada membro da equipe com um token por funcionário. Dois caminhos espelham o painel: e-mail + senha, ou um PIN numérico rápido para tablets compartilhados da cozinha. A equipe tem escopo por restaurante.

POST /restaurants/{id}/staff/login
POST /restaurants/{id}/staff/pin
curl -X POST https://mail.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"] } }

A resposta lista as permissões efetivas do membro da equipe Permissões — um subconjunto de orders, menu_edit, coupons, analytics, kds, customers derivadas de sua função (gerente / caixa / cozinha / garçom) mais quaisquer substituições por funcionário. Os endpoints são controlados por permissão (403 caso contrário).

API do app da equipe

Autentique com o token da equipe. Caminho base https://mail.menubarcode.com/api/v1/staff. Todas as ações têm escopo limitado ao restaurante do membro da equipe.

Authorization: Bearer RAW_STAFF_TOKEN
GET /staff/me

Perfil com lista de função e permissões.

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

Liste pedidos e atualize o status da cozinha. Requer a orders permissão.

GET /staff/kds kds

Comandas de cozinha ao vivo agrupadas por pedido, filtradas pela estação do membro da equipe (ou ?station_id=). Mostra apenas itens ainda queued|preparing|ready.

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

Avance (queued → preparing → ready → served) ou retroceda um status KDS. O status do pedido pai é ressincronizado automaticamente.

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

Edite o menu a partir do salão (gerentes). Mesmos payloads dos endpoints de menu do lojista, com escopo limitado ao restaurante do membro da equipe.

GET /staff/analytics analytics

Resumo de vendas do restaurante do membro da equipe (mesmo formato do endpoint de analytics do lojista; ?from=&to=).

POST /staff/logout

Revoga o token deste dispositivo.

Webhooks — configuração

Registre endpoints pelo painel em Tokens de API e webhooks. Escolha quais eventos cada endpoint recebe. Ao salvar, você recebe um por endpoint Segredo de assinatura; Use o Testar botão para enviar um ping. Pause um endpoint para interromper a entrega sem perder seu segredo.

Seu endpoint deve responder com um 2xx status rapidamente (em até 10s). Qualquer outro status — ou um tempo esgotado — é tratado como falha e reenviado.

Os endpoints também podem ser gerenciados programaticamente (para REST-Hooks do Zapier/Make) com um 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

O secret é retornado apenas na criação — guarde-o para verificar a assinatura. url deve ser um endpoint HTTPS público (protegido contra SSRF); events deve ser da lista abaixo (ou *).

Eventos de webhook

EventoDispara quando
order.createdUm novo pedido é feito (painel ou API).
order.status_changedO status de cozinha de um pedido muda (painel, POS ou API).
order.paidUm pedido é marcado como totalmente pago (gateway ou conta dividida).
order.driver_assignedUm entregador é atribuído a uma entrega.
order.out_for_deliveryO entregador está a caminho do cliente.
order.deliveredA entrega foi concluída.
order.delivery_failedA entrega não pôde ser concluída.
refund.completedÉ concluído um reembolso de um pedido.
reservation.createdUma reserva de mesa é criada.
reservation.cancelledUma reserva de mesa é cancelada.
customer.createdÉ criado um novo registo de cliente.
shift.openedUm turno de caixa / POS é aberto.
shift.closedUm turno de caixa / POS é fechado.
menu.updatedUm item de menu ou categoria é criado, atualizado ou excluído (qualquer origem). Payload: {restaurant_id, change, entity, id}.
entitlement.changedUm direito de recurso é concedido ou revogado para o workspace (mudança de plano, complemento, instalação/desinstalação de app, substituição de admin). Payload: {action, feature_key, source_type, source_id, user_id, occurred_at} onde action é granted ou revoked.
subscription.*Ciclo de vida da assinatura: subscription.paused, .resumed, .renewed, .expired, .plan_changed, .past_due, .expiring, .trial_ending.
app.uninstalledUm app do marketplace é desinstalado (entregue ao endpoint do app).
*Inscreva-se em todos os eventos acima.
pingEnviado pelo Testar botão para verificar a integração.

Falhou uma entrega enquanto seu endpoint estava fora do ar? Use Reenviar em qualquer linha do registro de Entregas recentes do painel para recolocá-la na fila com um novo webhook-id.

Payload do webhook

Cada entrega é um POST com este envelope JSON e estes cabeçalhos:

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" }
}

O id é único por entrega. Como as novas tentativas reutilizam o mesmo id, use-o para tornar seu handler idempotente.

Verificando a assinatura

O webhook-signature cabeçalho é um HMAC-SHA256, codificado em base64, calculado sobre {id}.{timestamp}.{body} usando o segredo de assinatura do seu endpoint. Vincular o id e o carimbo de data/hora à assinatura é o que torna uma requisição capturada segura contra reenvio. Rejeite qualquer requisição cujo webhook-timestamp tenha mais de ~5 minutos.

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 || ''));
}
um legado X-Webhook-Signature cabeçalho (HMAC-SHA256 simples do corpo, em hex) também é enviado por compatibilidade retroativa. Novas integrações devem usar webhook-signature.

Novas tentativas e registro de entregas

A entrega é assíncrona e reenviada em caso de falha com backoff exponencial mais jitter: aproximadamente 1m → 5m → 15m → 1h (até 5 tentativas no total). Cada tentativa — sucesso ou falha — é registrada no registro de entregas do seu painel com seu status HTTP, número da tentativa e trecho da resposta.

A entrega é pelo menos uma vez. Deduplique pelo webhook-id para lidar com repetições ocasionais.

Servidores MCP

Novo um guia de configuração de uma página, do tipo copiar e colar, para cada cliente está em /mcp — comandos de instalação por cliente, deeplinks de um clique, o catálogo de ferramentas e prompts de exemplo. Esta página continua sendo a referência aprofundada.

Cinco servidores Model Context Protocol conectam agentes de IA (ChatGPT, Claude, Cursor) à plataforma — escolha o que corresponde ao seu público. Todos falam JSON-RPC 2.0 sobre HTTP e negociam versões de protocolo 2024-11-05 / 2025-03-26 / 2025-06-18.

ServidorEndpointPúblicoAutenticaçãoFerramentas
Adminhttps://mail.menubarcode.com/mcpDonos de loja — gerenciar a lojaToken de API (Bearer)23
Storefronthttps://mail.menubarcode.com/mcp/storefrontO agente de um cliente — comprar e pedir em uma lojaToken da loja (escopo de agente)12
Customerhttps://mail.menubarcode.com/mcp/customerUm cliente conectado — seus próprios pedidosToken do cliente (login por OTP)5
Cataloghttps://mail.menubarcode.com/mcp/catalogQualquer pessoa — descobrir lojas em toda a plataformaPúblico3
Devhttps://mail.menubarcode.com/mcp/devFerramentas de IA para código — criar temas/integraçõesPúblico7

Início rápido: pular para Admin, Catalog, Customer, ou Dev. O servidor da vitrine compartilha o padrão de conexão do Admin com um X-Storefront-Token cabeçalho em vez de um token Bearer.

Servidor MCP (Admin)

Um cliente de IA compatível com MCP (Claude, ChatGPT, Cursor) pode operar seu restaurante em linguagem natural usando os mesmos tokens de API. Aponte-o para:

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

Autentique com Authorization: Bearer YOUR_TOKEN. Cada ferramenta declara a habilidade granular de que precisa (resource:action); um legado read token cobre todas as :read ferramentas e write cobre tudo. Todas as chamadas têm escopo limitado aos seus restaurantes e limite de taxa. As ferramentas para as quais você não tem a habilidade ficam ocultas em tools/list.

Conectar (Claude Code)

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

Listar ferramentas

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

Chamar uma ferramenta (ex.: adicionar um item de menu)

curl -X POST https://mail.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}}}'

Ferramentas

FerramentaHabilidadeO que faz
list_restaurantsreadRestaurantes que você possui.
get_menureadCategorias e itens de um restaurante.
list_categoriesmenu:readCategorias com contagem de itens.
add_categorymenu:writeCriar uma categoria.
update_categorymenu:writeRenomear / reordenar uma categoria.
delete_categorymenu:writeExcluir uma categoria (recusa se houver itens).
add_menu_itemwriteCriar um item de menu (limite do plano verificado).
update_menu_itemwriteEdite o nome/preço/descrição de um item.
delete_menu_itemmenu:writeExclua um item permanentemente.
set_item_availabilitymenu:writeMarcar um item em estoque/esgotado (alternador 86).
list_ordersorders:readPedidos, mais recentes primeiro; filtros de status/data/busca.
get_orderorders:readDetalhe completo do pedido, incl. itens.
update_order_statuswriteAvançar o status de cozinha de um pedido.
list_customerscustomers:read + crm_suiteLista CRM; busca por nome/telefone/e-mail. Oculta de tools/list sem o direito.
get_customercustomers:read + crm_suiteRegistro completo de um cliente. Oculto de tools/list sem o direito.
sales_reportanalytics:readReceita + contagem de pedidos + itens mais vendidos de um intervalo.
get_restaurant_settingsrestaurants:readInstantâneo do perfil e das configurações de pedidos.
update_business_hoursrestaurants:writeDefinir o texto de horário de funcionamento.
list_couponsorders:readSeus cupons de desconto.
create_couponorders:writeCriar um cupom percentual/fixo.
update_couponorders:writeEdite um cupom.
delete_couponorders:writeExclua um cupom.

Catalog MCP (descobrir restaurantes)

Um servidor MCP público e somente leitura que permite a agentes de IA descobrir restaurantes e pratos em toda a plataforma e depois criar deep links para uma loja específica para pedir. Sem autenticação, com limite de taxa.

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

Conectar (Claude Code)

claude mcp add --transport http platform-catalog https://mail.menubarcode.com/mcp/catalog
FerramentaO que faz
search_storesEncontre restaurantes por palavra-chave/cidade (name, address, menu_url, dica de storefront_mcp).
search_itemsEncontre pratos em todas as lojas (query/dietary/max_price/city), agrupados por loja.
get_storeDetalhe público completo de uma loja por slug ou id.
list_starter_menusAs predefinições de menu inicial incluídas a partir das quais uma nova loja pode começar (café, pizaria, hambúrguer, padaria, lounge).

Apenas lojas ativas e listadas publicamente aparecem; os proprietários podem desativar nas configurações da loja. Nenhum dado de contato do proprietário é retornado. Para fazer um pedido, use o MCP da vitrine da loja com um token de agente por loja.

MCP de Conta do Cliente

Permite que o assistente de IA de um cliente leia, rastreie e repita seus próprios pedidos. Autenticado por um token por cliente do login OTP existente; a identidade do cliente vem apenas do token — um telefone ou id de cliente nunca é aceito como argumento.

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

Obter um token (fluxo OTP)

# 1) request a one-time code (sent to the customer's phone)
curl -X POST https://mail.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://mail.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://mail.menubarcode.com/mcp/customer \
  --header "Authorization: Bearer CUSTOMER_TOKEN"
FerramentaO que faz
my_ordersSeus pedidos recentes (mais recentes primeiro).
order_detailDetalhe completo + itens de um dos seus pedidos.
track_orderStatus ao vivo por id do pedido ou token de rastreamento.
reorderReconstrói um pedido anterior como rascunho de carrinho (ignora itens esgotados).
my_profileSeu nome, telefone e contagem de pedidos.
my_bookingsAs suas próprias reservas de quarto de hotel neste local (código, estado, datas, tipo de quarto, total).
curl -X POST https://mail.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}}}'

Conecte seu editor de IA

Criando um tema ou uma integração com Claude Code, Cursor ou VS Code? Aponte-o para o servidor MCP Dev — sua ferramenta de IA obtém a documentação ao vivo da plataforma, a whitelist Liquid gerada e a validação de tema no servidor. Nenhum token necessário.

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

Claude Code

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

Cursor.cursor/mcp.json

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

VS Code.vscode/mcp.json

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

Ferramentas learn_platform (comece aqui), search_docs / fetch_full_doc, get_liquid_reference, get_section_schema, validate_theme, list_webhook_events. Fluxo de trabalho recomendado do agente: aprender → construir → validar → entregar.

O servidor MCP autenticado acima (https://mail.menubarcode.com/mcp) opera os dados do seu restaurante; este serve documentação e validação e pode ser compartilhado publicamente com segurança.

Registro de alterações

DataAlterar
2026-08-20Lançamento de PMS de hotel + crescimento: refund.completed, reservation.created, reservation.cancelled, customer.created, shift.opened, shift.closed eventos de webhook; registo de dispositivos push do pessoal + 2fa endpoints; novas ferramentas MCP hotel_availability, my_bookings, list_starter_menus, list_webhook_events.
2026-07-28Índice de descoberta gerado pelo roteador + Especificação OpenAPI 3.1 (sempre em paridade com a API implantada); Idempotency-Key na criação de pedidos; limites de taxa da API por token; subscription.* + app.uninstalled eventos de webhook + entrega Reenviar.
2026-07-07Público servidor MCP Dev para ferramentas de IA para código: busca de documentação ao vivo, referência Liquid gerada, validação de tema no servidor.
2026-07-02Escopos de token granulares (resource:action); edição de menu pela equipe + endpoints de analytics.
2026-07-02App da equipe: autenticação por token por funcionário (senha + PIN), controle por permissão de função, status do pedido, avanço/retorno do KDS.
2026-07-02App de cliente independente: autenticação por token por cliente (registro/login/OTP), perfil, criação de pedido + histórico, endereços salvos, navegação no menu público.
2026-07-02API de gerenciamento completa: CRUD de menu, criação de pedidos, entregadores + ciclo de vida da entrega, API de token do app do entregador, rastreamento público de pedidos, analytics de vendas, clientes. Novos eventos de webhook de entrega.
2026-07-02Entrega de webhook em fila com novas tentativas; assinatura Standard-Webhooks (webhook-id/timestamp/signature); order.paid evento; documentação pública.
2026-06-26API REST v1 inicial, tokens e endpoints de webhook.

Voltar para Menubarcode

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

Contate-nos

Siga-nos