NAV Navbar
shell php java delphi

Introdução

Bem vindo a documentação da API OiMenu! Você usará esta API para criar uma comunicação entre seu sistema e os endpoints de envio e recebimento de informações do OiMenu.

Ao longo da documentação, mostraremos descrições detalhadas dos métodos que disponibilizamos e também exemplos de aplicações em diversas linguagens de programação.

Precisa de ajuda ou quer tirar dúvidas? Entre em contato com nosso time de desenvolvimento pelo email [email protected].

Antes de começar a integração você precisa definir a linguagem de programação que irá utilizar ou usa em seu sistema. Após definido, selecione no canto superior direito uma linguagem e os exemplos de aplicações nessa linguagem serão mostrados a direita de seus respectivos tópicos. Se a linguagem que você usará não está presente em nossa documentação, entre em contato para que possamos te ajudar a desenvolver a integração e incluirmos aqui futuramente.

Token de acesso

Você também precisará de uma conta no OiMenu e um Token de acesso. Ambos, são gerados e enviados por nossa equipe para você. Se ainda não possui, entre em contato com nosso time de desenvolvimento e solicite seu Token de acesso.

Iniciando a integração

Integração com bibliotecas

Para algumas linguagens de programação, desenvolvemos SDKs, Dlls e formas de simplificar o desenvolvimento da integração entre ambos os lados. Você pode encontrar isso em nosso Github e usar gratuitamente.

Após entender os passos acima, você precisará importar a biblioteca de acordo com a linguagem escolhida.
Veja abaixo as bibliotecas disponíveis e formas de importação:

PHP

Biblioteca PHP instalada via Composer.

$ composer require oimenu/oimenu-php

Como alternativa, você pode baixar a biblioteca diretamente.

JAVA

Para o Maven, adicione a seguinte dependência ao seu POM:

<dependency>
  <groupId>br.com.oimenu</groupId>
  <artifactId>oimenu-java</artifactId>
  <version>1.0.0</version>
</dependency>

Em outros ambientes, instale manualmente os seguintes JARs:

DELPHI

Para utilizar nossa biblioteca Delphi, baixe a lib em nosso Github, descompacte o arquivo baixado na pasta de seu projeto e também inclua o arquivo OiMenuUtil.pas.

O OiMenu SDK necessita que as seguintes bibliotecas estejam adicionadas ao seu projeto para funcionar corretamente:

Integração manual

Recomendamos que utlize nossas bibliotecas para fazer a integração, porém, caso não queira usar bibliotecas ou não seja possível, você pode desenvolver manualmente a integração enviando e recebendo requests para nossa API.

Nossa URL base para comunicação com a API é:

https://developers.oimenu.com.br/api/v1

Comunicação

Utilizamos o padrão RESTful para comunicação entre os sistemas e o padrão de mensagens JSON para enviar e receber os dados.

Todas as respostas das requisições da API possuirão um indicador de sucesso chamado success. Caso o valor seja false um campo chamado message será enviado com a mensagem que indica a falha ocorrida na requisição (Clique aqui pra saber os tipos de falhas existentes). O tipo da requisição é importante, já que indica a ação que será executada, portanto:

Tipo Descrição
GET Retorna um registro ou uma lista de registros
POST Insere um registro
PUT Atualiza um registro
DELETE Remove um registro

Alguns cadastros poderão ser realizados em lote, ou seja, será possível inserir/atualizar vários registros em apenas uma requisição. Nesse caso o tipo de requisição será sempre POST e toda a lista de registros enviados será processada. Nesse processamento os registros que ainda não existirem serão inseridos e os já existentes serão atualizados.

Recebendo as respostas no formato XML:

Algumas linguagens não possuem bibliotecas nativas para interpretar o formato JSON, pensando nisso criamos um parâmetro chamado format que poderá ser enviado em todas as requisições.

Para que os dados sejam retornados no formato XML basta enviar o valor xml nesse parâmetro. Exemplo:

https://developers.oimenu.com.br/api/v1/orders?format=xml

Lembrando que esse parâmetro vai alterar apenas a resposta, os dados de envio para POST e PUT continuarão sendo esperados no formato JSON.

Autenticação

Exemplo de Autenticação:

curl -X GET "https://developers.oimenu.com.br/api/v1/orders" \
     -H "Authorization: Bearer <token>"
<?php
$oimenuClient = new \OiMenu\Client('<token>');
OimenuClient oimenuClient = new OimenuClient("<token>");
var
  orderResult : TOrderResult;
begin
  orderResult := getAllOrders('<token>');

Todas as requisições para a API devem ser feitas passando o Token de acesso no header da requisição, como no exemplo ao lado. O valor desse parâmetro será disponibilizado por nossa equipe ao parceiro para a realização da integração e testes.

Para solicitar seu Token entre em contato com nosso time de desenvolvimento pelo email [email protected].

Todas as solicitações da API devem ser feitas por meio de HTTPS. Chamadas feitas por HTTP simples falharão. Solicitações de API sem autenticação também falharão.

Outra coisa importante é saber que cada estabelecimento (restaurante, por exemplo) integrado terá uma conta e um Token de acesso que também forneceremos posteriormente.

Mensagens de Erro

Nós usamos respostas HTTP convencionais para indicar o sucesso ou a falha de uma solicitação da API. Em geral: os códigos no intervalo 2xx indicam sucesso. Os códigos 4xx indicam um erro que falhou, dadas as informações fornecidas (por exemplo, um parâmetro necessário foi omitido, etc.). Códigos 5xx indicam um erro com nossos servidores (raros de acontecer).

Abaixo está uma lista de retorno de Erros da API OiMenu com suas respectivas descrições:

Código Descrição Solução
400 Requisição inválida. Isto pode ser causado por envio de um JSON inválido no corpo da requisição, fornecendo parâmetros inválidos, etc.
401 Falha de autenticação. Verifique se o token foi informado corretamente no header da requisição (Clique aqui para mais detalhes sobre autenticação). Caso não possua um token, entre em contato pelo e-mail [email protected].
404 O recurso requisitado não existe. Verifique se o endpoint informado está correto.
429 Excesso de requisições. A requisição foi rejeitada devido a limitação de taxa. Diminua o intervalo entre as requisições.
500 Erro interno do servidor. Ocorreu um erro desconhecido e nós já fomos alertados. De toda forma, entre em contato pelo e-mail [email protected] para resolvermos o problema o mais rápido possível.

Separator 1

Sincronização entre os sistemas

Introdução a sincronização

Após entender como a autenticação funciona e os tipos de integração que disponibizamos, você deve entender como manter ambos os sistemas sincronizados.

Sempre que um produto é adicionado em seu sistema, tem o valor ou nome alterado ou é excluido, você deve enviar ao OiMenu essa informação para que possamos disponibilizar as mudanças ao cliente final do estabelecimento.

A seguir, listaremos uma série de métodos que podem ser usados para essa sincronização.

Enviar um produto de seu sistema para o OiMenu

Exemplo de Request:

curl -X POST "https://developers.oimenu.com.br/api/v1/product" \
     -H "Authorization: Bearer <token>" \
     -H "Content-Type: application/json" \
     -d '{
    "code": "106",
    "name": "Chopp da Casa 300ml",
    "price": 6.50,
    "extra_fields": {
        "any_field": 1
    }
}'
<?php
$response = $oimenuClient->createProduct([
    'code' => '106',
    'name' => 'Chopp da Casa 600ml',
    'price' => 6.50,
    'extra_fields' => [
        'any_field' => 1
    ]
]);
Product product = new Product();
product.setCode("106");
product.setName("Chopp da Casa 600ml");
product.setPrice(6.50);
product.setExtraFields("{\"any_field\":1}");

ProductResult result = oimenuClient.createProduct(product);
var
  productResult : TProductResult;
  product : TProduct;
begin
  product := TProduct.Create;
  product.code := '106';
  product.name := 'Chopp da Casa 600ml';
  product.price := 6.50;
  product.extraFields := '{"any_field":1}';

  productResult := createProduct('<token>', product);

O comando acima retornará um JSON como este:

{
    "success": true,
    "data": {
        "code": "106",
        "name": "Chopp da Casa 300ml",
        "price": "6.50",
        "extra_fields": {
            "any_field": 1
        }
    }
}

Quando um produto for adicionado em seu sistema, sugerimos que o envie para o OiMenu através deste método. Com isso, ele ficará disponível para ser adicionado no OiMenu mantendo um vínculo entre ambos os sistemas.

Isso ajuda na manutenção do cardápio. Quando o preço desse produto for alterado em seu sistema, por exemplo, automaticamente ele será atualizado no OiMenu.

HTTP Request

POST https://developers.oimenu.com.br/api/v1/product

Corpo da requisição

Objeto Produto

Nome Descrição Tipo Obrigatório Valor Padrão
code Código text Sim
name Nome text Sim
price Preço decimal(9,2) Não 0.00
extra_fields Campos extras json Não

Enviar produtos de seu sistema em lote para o OiMenu

Exemplo de Request:

curl -X POST "https://developers.oimenu.com.br/api/v1/products" \
     -H "Authorization: Bearer <token>" \
     -H "Content-Type: application/json" \
     -d '[
    {
        "code": "107",
        "name": "Chopp 300ml",
        "price": 5.90
    },
    {
        "code": "108",
        "name": "Chopp 600ml",
        "price": 9.90
    },
    {
        "code": "109",
        "name": "Cerveja Artesanal 300ml",
        "price": 12.00
    }
]'
<?php
$response = $oimenuClient->batchProducts([
    [
        'code' => '107',
        'name' => 'Chopp 300ml',
        'price' => 5.90
    ],
    [
        'code' => '108',
        'name' => 'Chopp 600ml',
        'price' => 9.90
    ],
    [
        'code' => '109',
        'name' => 'Cerveja Artesanal 300ml',
        'price' => 12.00
    ]
]);
Product product1 = new Product();
product1.setCode("107");
product1.setName("Chopp 300ml");
product1.setPrice(5.90);

Product product2 = new Product();
product2.setCode("108");
product2.setName("Chopp 600ml");
product2.setPrice(9.90);

Product product3 = new Product();
product3.setCode("109");
product3.setName("Cerveja Artesanal 300ml");
product3.setPrice(12.00);

List<Product> list = new ArrayList<Product>();
list.add(product1);
list.add(product2);
list.add(product3);

SimpleResult result = oimenuClient.batchProducts(list);
var
  simpleResult: TSimpleResult;
  listProduct: TListProduct;
  product1, product2, product3: TProduct;
begin

  product1 := TProduct.Create;
  product1.code := '107';
  product1.name := 'Chopp 300ml';
  product1.price := 5.90;

  product2 := TProduct.Create;
  product2.code := '108';
  product2.name := 'Chopp 600ml';
  product2.price := 9.90;

  product3 := TProduct.Create;
  product3.code := '109';
  product3.name := 'Chopp Artesanal 300ml';
  product3.price := 12.00;

  listProduct := TListProduct.Create;
  listProduct.Add(product1);
  listProduct.Add(product2);
  listProduct.Add(product3);

  simpleResult := batchProducts('<TOKEN>', listProduct);

O comando acima retornará um JSON como este:

{
    "success": true,
    "data": []
}

Quando você iniciar a integração com o OiMenu ou adicionar vários produtos de uma vez em seu sistema, sugerimos que envie para o OiMenu através deste método. Com isso, os produtos ficarão disponíveis para serem adicionados no OiMenu mantendo um vínculo entre ambos os sistemas.

Isso ajuda na manutenção do cardápio. Quando o preço dos produtos forem alterados em seu sistema, por exemplo, automaticamente eles serão atualizados no OiMenu.

HTTP Request

POST https://developers.oimenu.com.br/api/v1/products

Corpo da requisição

Lista de objetos Produto

Nome Descrição Tipo Obrigatório Valor Padrão
code Código text Sim
name Nome text Sim
price Preço decimal(9,2) Não 0.00
extra_fields Campos extras json Não

Atualizar um produto de seu sistema no OiMenu

Exemplo de Request:

curl -X PUT "https://developers.oimenu.com.br/api/v1/product/109" \
     -H "Authorization: Bearer <token>" \
     -H "Content-Type: application/json" \
     -d '{
    "name": "Cerveja Artesanal Suave 300ml",
    "price": 11.90
}'
<?php
$response = $oimenuClient->updateProduct('109', [
    'name' => 'Cerveja Artesanal Suave 300ml',
    'price' => 11.90
]);
Product product = new Product();
product.setCode("109");
product.setName("Cerveja Artesanal Suave 300ml");
product.setPrice(11.90);

ProductResult result = oimenuClient.updateProduct(product);
var
  productResult : TProductResult;
  product : TProduct;
begin
  product := TProduct.Create;
  product.code := '109';
  product.name := 'Cerveja Artesanal Suave 300ml';
  product.price := 11.90;

  productResult := updateProduct('<token>', product);

O comando acima retornará um JSON como este:

{
    "success": true,
    "data": {
        "code": "109",
        "name": "Cerveja Artesanal Suave 300ml",
        "price": "11.90",
        "extra_fields": null
    }
}

Se um produto for atualizado em seu sistema, sugerimos que use este método para atualiza-lo em nossa base. Isso é importante para manter a consistência dos dados em ambas as aplicações e prevenir erros de usuário no futuro.

HTTP Request

PUT https://developers.oimenu.com.br/api/v1/product/<codigo do produto>

Corpo da requisição

Objeto Produto

Nome Descrição Tipo Obrigatório Valor Padrão
name Nome text Não
price Preço decimal(9,2) Não 0.00
extra_fields Campos extras json Não

Remover um produto de seu sistema dentro do OiMenu

Exemplo de Request:

curl -X DELETE "https://developers.oimenu.com.br/api/v1/product/107" \
     -H "Authorization: Bearer <token>"
<?php
$response = $oimenuClient->deleteProduct('107');
SimpleResult result = oimenuClient.deleteProduct("107");
var
  simpleResult : TSimpleResult;
begin
  simpleResult := deleteProduct('<token>', '107');

O comando acima retornará um JSON como este:

{
    "success": true,
    "data": []
}

Sugerimos sempre que um produto for excluido de seu sistema, utilize este método para remover do OiMenu. Isso mantém a base limpa em ambos os lados e previne erros de integração no futuro.

HTTP Request

DELETE https://developers.oimenu.com.br/api/v1/product/<codigo do produto>

Corpo da requisição

Vazio

Listar os pedidos pendentes

Exemplo de Request:

curl -X GET "https://developers.oimenu.com.br/api/v1/orders" \
     -H "Authorization: Bearer <token>"
<?php
$response = $oimenuClient->getAllOrders();
OrderResult result = oimenuClient.getAllOrders();
var
  orderResult : TOrderResult;
begin
  orderResult := getAllOrders('<token>');

O comando acima retornará um JSON como este:

{
    "success": true,
    "data": [
        {
            "id": "9df1eab2-16dc-4b34-b42a-2f839be89be0",
            "date": "2018-06-21 14:17:37",
            "table": 2,
            "card": null,
            "waiter": "99",
            "items": [
                {
                    "id": "7b937046-c0f3-4257-947b-8233efe082fc",
                    "code": "102",
                    "name": "Batata com Cheddar e Bacon",
                    "quantity": 2,
                    "price": "6.00",
                    "options": [],
                    "notes": [],
                    "extra_fields": null
                },
                {
                    "id": "2bfb33b7-fbe1-4f34-bb60-440b9738a0de",
                    "code": "100",
                    "name": "Sanduíche",
                    "quantity": 1,
                    "price": "29.90",
                    "options": [
                        {
                            "id": "4919ed9b-704d-4d09-81d5-a7b94e518d10",
                            "option_id": "",
                            "code": "104",
                            "name": "Molho Barbecue",
                            "quantity": 1,
                            "price": "4.00",
                            "notes": [],
                            "extra_fields": null
                        }
                    ],
                    "notes": [
                        "Sem Partir - Sim",
                        "Tipo do Pão - Crocante"
                    ]
                }
            ]
        }
    ],
    "count": 1
}

Sempre que um cliente em um estabelecimento fizer um pedido, este pedido será adicionado a um JSON em nosso sistema e disponibilizaremos em um endpoint.

Periodiamente esse endpoint deve ser consumido e os pedidos contidos nele, adicionados em seu sistema. Indicamos um intervalo de 1 minuto entre uma chamada e outra, mas fica a seu critério.

HTTP Request

GET https://developers.oimenu.com.br/api/v1/orders

Resposta

Objeto Pedido

Nome Descrição Tipo Formato
id Identificador do pedido uuid
date Data/hora do pedido datetime YYYY-MM-DD HH24:MI:SS
table Código da mesa integer
card Código da comanda integer
waiter Código do garçom string
items Lista de itens Item[]

Objeto Item

Nome Descrição Tipo
id Identificador do item no pedido uuid
code Código do produto text
name Nome do produto text
quantity Quantidade vendida integer
price Preço unitário decimal(9,2)
options Lista de configurações do item Option[]
notes Lista de observações text[]
extra_fields JSON com dados extras do produto json

Objeto Option

Nome Descrição Tipo
id Identificador da opção no item uuid
option_id Identificador da opção pai uuid
code Código do produto/opcional text
name Nome do produto/opcional text
quantity Quantidade vendida decimal(21,10)
price Preço unitário decimal(21,10)
notes Lista de observações text[]
extra_fields JSON com dados extras do produto json

Ao acessar o endpoint, pegar os pedidos e adicionar em seu sistema, você deve marcá-lo como recebido para que ele não apareça mais no JSON e não gere duplicidade de informações. Veja mais no método a seguir.

Marcar um pedido como recebido

Exemplo de Request:

curl -X PUT "https://developers.oimenu.com.br/api/v1/order/<id do pedido>/received" \
     -H "Authorization: Bearer <token>"
<?php
$response = $oimenuClient->setOrderAsReceived('<id do pedido>');
SimpleResult result = oimenuClient.setOrderAsReceived("<id do pedido>");
var
  simpleResult : TSimpleResult;
begin
  simpleResult := setOrderAsReceived('<token>', '<id do pedido>');

O comando acima retornará um JSON como este:

{
    "success": true,
    "data": []
}

Para que um pedido saia do JSON de pedidos pendentes, é necessário marcá-lo como recebido. Para isso, basta enviar uma requisição para o endpoint passando o id do pedido que deve ser marcado como recebido.

HTTP Request

PUT https://developers.oimenu.com.br/api/v1/order/<id do pedido>/received

Corpo da requisição

Vazio

Listar os eventos pendentes

Exemplo de Request:

curl -X GET "https://developers.oimenu.com.br/api/v1/events" \
     -H "Authorization: Bearer <token>"
<?php
$response = $oimenuClient->getAllEvents();
EventResult result = oimenuClient.getAllEvents();
var
  eventResult : TEventResult;
begin
  eventResult := getAllEvents('<token>');

O comando acima retornará um JSON como este:

{
    "success": true,
    "data": [
        {
            "id": "f22d1373-6cc3-4178-9510-1740096841ff",
            "date": "2019-07-12 13:46:03",
            "type": "the-check",
            "data": {
                "table": "1",
                "card": "",
                "waiter": "99",
                "split_with": "1"
            }
        },
        {
            "id": "93161f05-5997-4317-b462-0724338be99e",
            "date": "2019-07-12 13:46:46",
            "type": "call-waiter",
            "data": {
                "table": "1",
                "waiter": "99",
                "options": [
                    "1x Copo Extra",
                    "2x Copo com Gelo",
                    "3x Talheres Extra",
                    "4x Prato Extra",
                    "Outras dúvidas",
                    "Limpar mesa"
                ]
            }
        }
    ],
    "count": 2
}

Nesse endpoint serão retornados eventos que indicam alguma ação que aconteceu no OiMenu. Hoje temos disponíveis dois eventos:

Chamar garçom

Evento indicando que o cliente precisa de algo e está chamando o garçom, por exemplo, o cliente solicitou a limpeza da mesa.

Pedir conta

Evento indicando que o cliente pediu a conta.

HTTP Request

GET https://developers.oimenu.com.br/api/v1/events

Resposta

Objeto Evento

Nome Descrição Tipo Formato
id Identificador do evento uuid
date Data/hora do evento datetime YYYY-MM-DD HH24:MI:SS
type Tipo do evento string call-waiter ou the-check
data Dados do evento objeto Chamar Garcom ou Pedir Conta

Objeto Chamar Garcom

Esse objeto será retornado quando o tipo de evento (type) for call-waiter.

Nome Descrição Tipo
table Código da mesa integer
waiter Código do garçom string
options Lista de solicitações do cliente string[]

Objeto Pedir Conta

Esse objeto será retornado quando o tipo de evento (type) for the-check.

Nome Descrição Tipo
table Código da mesa integer
card Código da comanda integer
waiter Código do garçom string
split_with Quantidade de pessoas para dividir a conta integer

Após obter os eventos e processar em seu sistema, você deve marcá-lo como recebido para que ele não apareça mais no JSON e não gere duplicidade de informações. Veja mais no método a seguir.

Marcar um evento como recebido

Exemplo de Request:

curl -X PUT "https://developers.oimenu.com.br/api/v1/event/<id do evento>/received" \
     -H "Authorization: Bearer <token>"
<?php
$response = $oimenuClient->setEventAsReceived('<id do evento>');
SimpleResult result = oimenuClient.setEventAsReceived("<id do evento>");
var
  simpleResult : TSimpleResult;
begin
  simpleResult := setEventAsReceived('<token>', '<id do evento>');

O comando acima retornará um JSON como este:

{
    "success": true,
    "data": []
}

Para que um evento saia do JSON de eventos pendentes, é necessário marcá-lo como recebido. Para isso, basta enviar uma requisição para o endpoint passando o id do evento que deve ser marcado como recebido.

HTTP Request

PUT https://developers.oimenu.com.br/api/v1/event/<id do evento>/received

Corpo da requisição

Vazio

Ações no Modo Mesa

Fechar o consumo de uma mesa

Exemplo de Request:

curl -X PUT "https://developers.oimenu.com.br/api/v1/table/<codigo da mesa>/close" \
     -H "Authorization: Bearer <token>"
<?php
$response = $oimenuClient->closeTable(<codigo da mesa>);
SimpleResult result = oimenuClient.closeTable(<codigo da mesa>);
var
  simpleResult : TSimpleResult;
begin
  simpleResult := closeTable('<token>', <codigo da mesa>);

O comando acima retornará um JSON como este:

{
    "success": true,
    "data": []
}

Sempre que uma mesa for fechada em seu sistema, você deve enviar uma request para o OiMenu passando o código da mesa que deve ser fechada. Com isso, nós conseguimos fechar a consumação em nosso lado e liberar a mesa novamente para uso.

Veja o exemplo ao lado.

HTTP Request

PUT https://developers.oimenu.com.br/api/v1/table/<codigo da mesa>/close

Corpo da requisição

Vazio

Transferir o consumo de uma mesa

Exemplo de Request:

curl -X PUT "https://developers.oimenu.com.br/api/v1/table/<codigo da mesa>/transfer" \
     -H "Authorization: Bearer <token>" \
     -H "Content-Type: application/json" \
     -d '{
        "new_table": <codigo da mesa de destino>
     }'
<?php
$response = $oimenuClient->transferTable(<codigo da mesa>, <codigo da mesa de destino>);

O comando acima retornará um JSON como este:

{
    "success": true,
    "data": []
}

Quando houver uma transferência do consumo de uma mesa para outra, é necessário sincronizar essa informação com o OiMenu, assim o cliente terá informações precisas sobre a conta. Para fazer a transferência basta enviar a mesa atual e a mesa de destino.

Veja o exemplo ao lado.

HTTP Request

PUT https://developers.oimenu.com.br/api/v1/table/<codigo da mesa>/transfer

Corpo da requisição

Nome Descrição Tipo Obrigatório
new_table Código da mesa de destino integer Sim

Cancelar o consumo de uma mesa

Exemplo de Request:

curl -X PUT "https://developers.oimenu.com.br/api/v1/table/<codigo da mesa>/cancel" \
     -H "Authorization: Bearer <token>"
<?php
$response = $oimenuClient->cancelTable(<codigo da mesa>);
SimpleResult result = oimenuClient.cancelTable(<codigo da mesa>);
var
  simpleResult : TSimpleResult;
begin
  simpleResult := cancelTable('<token>', <codigo da mesa>);

O comando acima retornará um JSON como este:

{
    "success": true,
    "data": []
}

Quando a consumação de uma mesa for cancelada (se tratou de um teste, ou o cliente solicitou, por exemplo), você deve enviar uma request para o OiMenu passando o código da mesa que deve ser cancelada. Em nosso lado, nós cancelaremos todos os itens consumidos naquela mesa e liberaremos a mesa novamente para uso.

Veja o exemplo ao lado.

HTTP Request

PUT https://developers.oimenu.com.br/api/v1/table/<codigo da mesa>/cancel

Corpo da requisição

Vazio

Adicionar um item a uma mesa

Exemplo de Request:

curl -X POST "https://developers.oimenu.com.br/api/v1/table/<codigo da mesa>/item" \
     -H "Authorization: Bearer <token>" \
     -H "Content-Type: application/json" \
     -d '{
        "code": "100",
        "name": "Bala de coco X",
        "quantity": 1,
        "price": 2.5
     }'
<?php
$response = $oimenuClient->createTableItem(<codigo da mesa>, [
    'code' => '100',
    'name' => 'Bala de coco X',
    'quantity' => 1,
    'price' => 2.5
]);

O comando acima retornará um JSON como este:

{
  "success": true,
  "data": {
    "id": "bb7d91f6-d478-43cb-ad00-edf472c6bf2d",
    "code": "100",
    "name": "Bala de coco X",
    "quantity": 1,
    "price": 2.5,
    "options": [],
    "notes": [],
    "extra_fields": null
  }
}

Quando um item for inserido diretamente pelo seu sistema, essa informação deve ser sincronizada com o OiMenu. Para isso é necessário enviar o código da mesa e os dados do item para ser inserido.

Veja exemplo ao lado.

HTTP Request

POST https://developers.oimenu.com.br/api/v1/table/<codigo da mesa>/item

Corpo da requisição

Objeto Item

Nome Descrição Tipo Obrigatório
code Código do produto text Sim
name Nome do produto text Sim
quantity Quantidade vendida integer Sim
price Preço unitário decimal(9,2) Sim

Atualizar um item de uma mesa

Exemplo de Request:

curl -X PUT "https://developers.oimenu.com.br/api/v1/table/<codigo da mesa>/item/<id do item no pedido>" \
     -H "Authorization: Bearer <token>" \
     -H "Content-Type: application/json" \
     -d '{
        "quantity": 2,
        "price": 2.75
     }'
<?php
$response = $oimenuClient->updateTableItem(<codigo da mesa>, <id do item no pedido>, [
    'quantity' => 2,
    'price' => 2.75
]);

O comando acima retornará um JSON como este:

{
  "success": true,
  "data": {
    "id": "bb7d91f6-d478-43cb-ad00-edf472c6bf2d",
    "code": "100",
    "name": "Bala de coco X",
    "quantity": 2,
    "price": 2.75,
    "options": [],
    "notes": [],
    "extra_fields": null
  }
}

Quando um item for atualizado diretamente pelo seu sistema, essa informação deve ser sincronizada com o OiMenu. Para isso é necessário enviar o código da mesa, o id do item no pedido e os dados do item para ser atualizado.

Veja exemplo ao lado.

HTTP Request

PUT https://developers.oimenu.com.br/api/v1/table/<codigo da mesa>/item/<id do item no pedido>

Corpo da requisição

Objeto Item

Nome Descrição Tipo Obrigatório
quantity Quantidade vendida integer Não
price Preço unitário decimal(9,2) Não

Transferir um item de uma mesa

Exemplo de Request:

curl -X PUT "https://developers.oimenu.com.br/api/v1/table/<codigo da mesa>/item/<id do item no pedido>/transfer" \
     -H "Authorization: Bearer <token>" \
     -H "Content-Type: application/json" \
     -d '{
        "new_table": <codigo da mesa de destino>,
        "quantity": 1
     }'
<?php
// faz a transferência total do item
$response = $oimenuClient->transferTableItem(<codigo da mesa>, <codigo da mesa de destino>, '<id do item no pedido>');

// faz a transferência parcial do item
$response = $oimenuClient->transferTableItem(<codigo da mesa>, <codigo da mesa de destino>, '<id do item no pedido>', <quantidade p/ transferir>);

Na transferência total, o JSON de retorno será:

{
  "success": true,
  "data": {
    "new_item": null
  }
}

Na transferência parcial, o JSON de retorno terá o novo item:

{
  "success": true,
  "data": {
    "new_item": {
      "id": "c24f5bfd-cf9e-4594-8bd2-da9529b918cf",
      "code": "135",
      "name": "Amendoin Japonês",
      "quantity": "1",
      "price": "2.00",
      "options": [],
      "notes": [],
      "extra_fields": null
    }
  }
}

Quando um item for transferido em seu sistema, essa informação deve ser sincronizada com o OiMenu. Para isso é necessário passar o código da mesa, o código da mesa de destino e o id do item no pedido que deve ser transferido. Em nosso lado, nós vamos transferir apenas esse item.

Também é possível fazer uma transferência parcial do item, passando uma quantidade específica no campo quantity. Nesse caso, o retorno da requisição trará informações referentes ao novo item criado para a quantidade transferida. Você deverá salvar o id desse item para que seja possível fazer sincronizações posteriores.

Veja exemplo ao lado.

HTTP Request

PUT https://developers.oimenu.com.br/api/v1/table/<codigo da mesa>/item/<id do item no pedido>/transfer

Corpo da requisição

Nome Descrição Tipo Obrigatório
new_table Código da mesa de destino integer Sim
quantity Quantidade transferida integer Não

Resposta

Nome Descrição Tipo
new_item Objeto referente ao novo item, se a transferência foi parcial Item

Objeto Item de resposta

Nome Descrição Tipo
id Identificador do item no pedido uuid
code Código do produto text
name Nome do produto text
quantity Quantidade vendida integer
price Preço unitário decimal(9,2)
options Lista de configurações do item Option[]
notes Lista de observações text[]
extra_fields JSON com dados extras do produto json

Cancelar um item de uma mesa

Exemplo de Request:

# Caso queira cancelar uma quantidade especifica do item, basta passar a quantidade no envio em formato JSON
curl -X PUT "https://developers.oimenu.com.br/api/v1/table/<codigo da mesa>/item/<id do item no pedido>/cancel" \
     -H "Authorization: Bearer <token>" \
     -H "Content-Type: application/json" \
     -d '{
        "quantity": 1
     }'
<?php
// faz o cancelamento total
$response = $oimenuClient->cancelTableItem(<codigo da mesa>, '<id do item no pedido>');

// faz o cancelamento parcial
$response = $oimenuClient->cancelTableItem(<codigo da mesa>, '<id do item no pedido>', <quantidade p/ cancelar>);
// faz o cancelamento total
ItemResult result = oimenuClient.cancelTableItem(<codigo da mesa>, "<id do item no pedido>");

// faz o cancelamento parcial
ItemResult result = oimenuClient.cancelTableItem(<codigo da mesa>, "<id do item no pedido>", <quantidade p/ cancelar>);
var
  itemResult  : TItemResult;
begin
  // faz o cancelamento total
  itemResult := cancelTableItem('<token>', <codigo da mesa>, '<id do item no pedido>');

  // faz o cancelamento parcial
  itemResult := cancelTableItemQtd('<token>', <codigo da mesa>, '<id do item no pedido>', <quantidade p/ cancelar>);

O comando acima retornará um JSON como este:

{
    "success": true,
    "data": {
        "id": "7b937046-c0f3-4257-947b-8233efe082fc",
        "code": "102",
        "name": "Batata com Cheddar e Bacon",
        "quantity": 1,
        "price": "6.00",
        "options": [],
        "notes": [],
        "extra_fields": null
    }
}

Quando um item for cancelado em seu sistema (foi lançado enganado ou cliente desistiu do item, por exemplo), você deve enviar uma request para o OiMenu passando o código da mesa e o ID do item pedido que deve ser cancelado. Em nosso lado, nós cancelaremos apenas aquele item.

Também é possível fazer o cancelamento parcial do item que deve ser cancelado.

Ex: Existem dois sucos lançados na mesa mas o cliente só consumiu um.

Você irá cancelar um item em seu sistema e enviar uma request passando o ID do produto que deve ser cancelado e o parâmetro quantity.

Veja exemplo ao lado.

HTTP Request

PUT https://developers.oimenu.com.br/api/v1/table/<codigo da mesa>/item/<id do item no pedido>/cancel

Corpo da requisição

Nome Descrição Tipo Obrigatório
quantity Quantidade cancelada integer Não

Resposta

Objeto Item

Nome Descrição Tipo
id Identificador do item no pedido uuid
code Código do produto text
name Nome do produto text
quantity Quantidade vendida integer
price Preço unitário decimal(9,2)
options Lista de configurações do item Option[]
notes Lista de observações text[]
extra_fields JSON com dados extras do produto json

Ações no Modo Comanda

Fechar o consumo de uma comanda

Exemplo de Request:

curl -X PUT "https://developers.oimenu.com.br/api/v1/card/<codigo da comanda>/close" \
     -H "Authorization: Bearer <token>"
<?php
$response = $oimenuClient->closeCard(<codigo da comanda>);
SimpleResult result = oimenuClient.closeCard(<codigo da comanda>);
var
  simpleResult : TSimpleResult;
begin
  simpleResult := closeCard('<token>', <codigo da comanda>);

O comando acima retornará um JSON como este:

{
    "success": true,
    "data": []
}

Sempre que uma comanda for fechada em seu sistema, você deve enviar uma request para o OiMenu passando o código da mesa que deve ser fechada. Com isso, nós conseguimos fechar a consumação em nosso lado e liberar a comanda novamente para uso.

Veja o exemplo ao lado.

HTTP Request

PUT https://developers.oimenu.com.br/api/v1/card/<codigo da comanda>/close

Corpo da requisição

Vazio

Transferir o consumo de uma comanda

Exemplo de Request:

curl -X PUT "https://developers.oimenu.com.br/api/v1/card/<codigo da comanda>/transfer" \
     -H "Authorization: Bearer <token>" \
     -H "Content-Type: application/json" \
     -d '{
        "new_card": <codigo da comanda de destino>
     }'
<?php
$response = $oimenuClient->transferCard(<codigo da comanda>, <codigo da comanda de destino>);

O comando acima retornará um JSON como este:

{
    "success": true,
    "data": []
}

Quando houver uma transferência do consumo de uma comanda para outra, é necessário sincronizar essa informação com o OiMenu, assim o cliente terá informações precisas sobre a conta. Para fazer a transferência basta enviar a comanda atual e a comanda de destino.

Veja o exemplo ao lado.

HTTP Request

PUT https://developers.oimenu.com.br/api/v1/card/<codigo da comanda>/transfer

Corpo da requisição

Nome Descrição Tipo Obrigatório
new_card Código da comanda de destino integer Sim

Cancelar o consumo de uma comanda

Exemplo de Request:

curl -X PUT "https://developers.oimenu.com.br/api/v1/card/<codigo da comanda>/cancel" \
     -H "Authorization: Bearer <token>"
<?php
$response = $oimenuClient->cancelCard(<codigo da comanda>);
SimpleResult result = oimenuClient.cancelCard(<codigo da comanda>);
var
  simpleResult : TSimpleResult;
begin
  simpleResult := cancelCard('<token>', <codigo da comanda>);

O comando acima retornará um JSON como este:

{
    "success": true,
    "data": []
}

Quando a consumação de uma comanda for cancelada (se tratou de um teste, ou o cliente solicitou, por exemplo), você deve enviar uma request para o OiMenu passando o código da mesa que deve ser cancelada. Em nosso lado, nós cancelaremos todos os itens consumidos naquela comanda e liberaremos a comanda novamente para uso.

Veja o exemplo ao lado.

HTTP Request

PUT https://developers.oimenu.com.br/api/v1/card/<codigo da comanda>/cancel

Corpo da requisição

Vazio

Adicionar um item a uma comanda

Exemplo de Request:

curl -X POST "https://developers.oimenu.com.br/api/v1/card/<codigo da comanda>/item" \
     -H "Authorization: Bearer <token>" \
     -H "Content-Type: application/json" \
     -d '{
        "code": "100",
        "name": "Bala de coco X",
        "quantity": 1,
        "price": 2.5
     }'
<?php
$response = $oimenuClient->createCardItem(<codigo da comanda>, [
    'code' => '100',
    'name' => 'Bala de coco X',
    'quantity' => 1,
    'price' => 2.5
]);

O comando acima retornará um JSON como este:

{
  "success": true,
  "data": {
    "id": "bb7d91f6-d478-43cb-ad00-edf472c6bf2d",
    "code": "100",
    "name": "Bala de coco X",
    "quantity": 1,
    "price": 2.5,
    "options": [],
    "notes": [],
    "extra_fields": null
  }
}

Quando um item for inserido diretamente pelo seu sistema, essa informação deve ser sincronizada com o OiMenu. Para isso é necessário passar o código da comanda e os dados do item para ser inserido.

Veja exemplo ao lado.

HTTP Request

POST https://developers.oimenu.com.br/api/v1/card/<codigo da comanda>/item

Corpo da requisição

Objeto Item

Nome Descrição Tipo Obrigatório
code Código do produto text Sim
name Nome do produto text Sim
quantity Quantidade vendida integer Sim
price Preço unitário decimal(9,2) Sim

Atualizar um item de uma comanda

Exemplo de Request:

curl -X PUT "https://developers.oimenu.com.br/api/v1/card/<codigo da comanda>/item/<id do item no pedido>" \
     -H "Authorization: Bearer <token>" \
     -H "Content-Type: application/json" \
     -d '{
        "quantity": 2,
        "price": 2.75
     }'
<?php
$response = $oimenuClient->updateCardItem(<codigo da comanda>, <id do item no pedido>, [
    'quantity' => 2,
    'price' => 2.75
]);

O comando acima retornará um JSON como este:

{
  "success": true,
  "data": {
    "id": "bb7d91f6-d478-43cb-ad00-edf472c6bf2d",
    "code": "100",
    "name": "Bala de coco X",
    "quantity": 2,
    "price": 2.75,
    "options": [],
    "notes": [],
    "extra_fields": null
  }
}

Quando um item for atualizado diretamente pelo seu sistema, essa informação deve ser sincronizada com o OiMenu. Para isso é necessário enviar o código da comanda, o id do item no pedido e os dados do item para ser atualizado.

Veja exemplo ao lado.

HTTP Request

PUT https://developers.oimenu.com.br/api/v1/card/<codigo da comanda>/item/<id do item no pedido>

Corpo da requisição

Objeto Item

Nome Descrição Tipo Obrigatório
quantity Quantidade vendida integer Não
price Preço unitário decimal(9,2) Não

Transferir um item de uma comanda

Exemplo de Request:

curl -X PUT "https://developers.oimenu.com.br/api/v1/card/<codigo da comanda>/item/<id do item no pedido>/transfer" \
     -H "Authorization: Bearer <token>" \
     -H "Content-Type: application/json" \
     -d '{
        "new_card": <codigo da comanda de destino>,
        "quantity": 1
     }'
<?php
// faz a transferência total do item
$response = $oimenuClient->transferCardItem(<codigo da comanda>, <codigo da comanda de destino>, '<id do item no pedido>');

// faz a transferência parcial do item
$response = $oimenuClient->transferCardItem(<codigo da comanda>, <codigo da comanda de destino>, '<id do item no pedido>', <quantidade p/ transferir>);

Na transferência total, o JSON de retorno será:

{
  "success": true,
  "data": {
    "new_item": null
  }
}

Na transferência parcial, o JSON de retorno terá o novo item:

{
  "success": true,
  "data": {
    "new_item": {
      "id": "c24f5bfd-cf9e-4594-8bd2-da9529b918cf",
      "code": "135",
      "name": "Amendoin Japonês",
      "quantity": "1",
      "price": "2.00",
      "options": [],
      "notes": [],
      "extra_fields": null
    }
  }
}

Quando um item for transferido em seu sistema, essa informação deve ser sincronizada com o OiMenu. Para isso é necessário passar o código da comanda, o código da comanda de destino e o id do item no pedido que deve ser transferido. Em nosso lado, nós vamos transferir apenas esse item.

Também é possível fazer uma transferência parcial do item, passando uma quantidade específica no campo quantity. Nesse caso, o retorno da requisição trará informações referentes ao novo item criado para a quantidade transferida. Você deverá salvar o id desse item para que seja possível fazer sincronizações posteriores.

Veja exemplo ao lado.

HTTP Request

PUT https://developers.oimenu.com.br/api/v1/table/<codigo da mesa>/item/<id do item no pedido>/transfer

Corpo da requisição

Nome Descrição Tipo Obrigatório
new_card Código da comanda de destino integer Sim
quantity Quantidade transferida integer Não

Resposta

Nome Descrição Tipo
new_item Objeto referente ao novo item, se a transferência foi parcial Item

Objeto Item de resposta

Nome Descrição Tipo
id Identificador do item no pedido uuid
code Código do produto text
name Nome do produto text
quantity Quantidade vendida integer
price Preço unitário decimal(9,2)
options Lista de configurações do item Option[]
notes Lista de observações text[]
extra_fields JSON com dados extras do produto json

Cancelar um item de uma comanda

Exemplo de Request:

# Caso queira cancelar uma quantidade especifica do item, basta passar a quantidade no envio em formato JSON
curl -X PUT "https://developers.oimenu.com.br/api/v1/card/<codigo da comanda>/item/<id do item no pedido>/cancel" \
     -H "Authorization: Bearer <token>"
     -H "Content-Type: application/json" \
     -d '{
        "quantity": 1
     }'
<?php
// faz o cancelamento total
$response = $oimenuClient->cancelCardItem(<codigo da comanda>, '<id do item no pedido>');

// faz o cancelamento parcial
$response = $oimenuClient->cancelCardItem(<codigo da comanda>, '<id do item no pedido>', <quantidade p/ cancelar>);
// faz o cancelamento total
ItemResult result = oimenuClient.cancelCardItem(<codigo da comanda>, "<id do item no pedido>");

// faz o cancelamento parcial
ItemResult result = oimenuClient.cancelCardItem(<codigo da comanda>, "<id do item no pedido>", <quantidade p/ cancelar>);
var
  itemResult  : TItemResult;
begin
  // faz o cancelamento total
  itemResult := cancelCardItem('<token>', <codigo da comanda>, '<id do item no pedido>');

  // faz o cancelamento parcial
  itemResult := cancelCardItemQtd('<token>', <codigo da comanda>, '<id do item no pedido>', <quantidade p/ cancelar>);

O comando acima retornará um JSON como este:

{
    "success": true,
    "data": {
        "id": "7b937046-c0f3-4257-947b-8233efe082fc",
        "code": "102",
        "name": "Batata com Cheddar e Bacon",
        "quantity": 1,
        "price": "6.00",
        "options": [],
        "notes": [],
        "extra_fields": null
    }
}

HTTP Request

PUT https://developers.oimenu.com.br/api/v1/card/<codigo da comanda/item/<id do item no pedido>/cancel

Quando um item for cancelado em seu sistema (foi lançado enganado ou cliente desistiu do item, por exemplo), você deve enviar uma request para o OiMenu passando o código da mesa e o ID do item pedido que deve ser cancelado. Em nosso lado, nós cancelaremos apenas aquele item.

Também é possível fazer o cancelamento parcial do item que deve ser cancelado.

Ex: Existem dois sucos lançados na comanda mas o cliente só consumiu um.

Você irá cancelar um item em seu sistema e enviar uma request passando o ID do produto que deve ser cancelado e o parâmetro quantity.

Veja exemplo ao lado.

Corpo da requisição

Nome Descrição Tipo Obrigatório
quantity Quantidade cancelada integer Não

Resposta

Objeto Item

Nome Descrição Tipo
id Identificador do item no pedido uuid
code Código do produto text
name Nome do produto text
quantity Quantidade vendida integer
price Preço unitário decimal(9,2)
options Lista de configurações do item Option[]
notes Lista de observações text[]
extra_fields JSON com dados extras do produto json

Separator 2

Mesas

Introdução sobre Mesas

No OiMenu, disponibilizamos 2 formas de organização de pedidos feitos: Modo Mesa e Modo Comanda. Esse tipo de funcionamento é configurado ao cadastrar o cardápio do cliente.

No modo mesa, o cliente chega no estabelecimento e ao fazer o pedido, enviamos o número da mesa em que ele está para o seu sistema via integração.

As mesas cadastradas no OiMenu possuem:

Nome Descrição
Código Código da mesa. Normalmente seguem uma ordem sequencial.
Apelido Uma forma de facilitar a identificação da mesa. Ex: Mesa externa
Serviço A taxa cobrada pela casa. O valor padrão é 0
Ativa É o status da mesa. Ela vem por padrão Ativada, mas pode ser desativada manualmente

Cadastrar uma mesa

Exemplo de Request:

curl -X POST "https://developers.oimenu.com.br/api/v1/table" \
     -H "Authorization: Bearer <token>" \
     -H "Content-Type: application/json" \
     -d '{
        "code": 4,
        "name": "Mesa 4",
        "service_percentage": 10.00
    }'
<?php
$response = $oimenuClient->createTable([
    'code' => 4,
    'name' => 'Mesa 4',
    'service_percentage' => 10.00
]);
Table table = new Table();
table.setCode(4);
table.setName("Mesa 4");
table.setServicePercentage(10.00);

TableResult result = oimenuClient.createTable(table);
var
  tableResult : TTableResult;
  table : TTable;
begin
  table := TTable.Create;
  table.code := 4;
  table.name := 'Mesa 4';
  table.servicePercentage := 10.00;

  tableResult := createTable('<token>', table);

O comando acima retornará um JSON como este:

{
    "success": true,
    "data": {
        "code": 4,
        "name": "Mesa 4",
        "service_percentage": "10.00"
    }
}

Sugerimos que use este método sempre que uma mesa for cadastrada em seu sistema. Com isso, a mesa já ficará disponibilizada no tablet para o cliente final, sem precisar ser adicionado manualmente também no OiMenu.

HTTP Request

POST https://developers.oimenu.com.br/api/v1/table

Corpo da requisição

Objeto Mesa

Nome Descrição Tipo Obrigatório Valor Padrão Valores
code Código integer Sim
name Identificação text Não
service_percentage A taxa cobrada pela casa decimal(4,2) Não 0.00
active Situação integer Não 1 0 - Inativo
1 - Ativo

Cadastrar mesas em lote

Exemplo de Request:

curl -X POST "https://developers.oimenu.com.br/api/v1/tables" \
     -H "Authorization: Bearer <token>" \
     -H "Content-Type: application/json" \
     -d '[
        {
            "code": 5,
            "name": "Mesa 5",
            "service_percentage": 10.00
        },
        {
            "code": 6,
            "name": "Mesa 6 - Central",
            "service_percentage": 10.00
        },
        {
            "code": 7,
            "name": "Mesa 7 - Especial",
            "service_percentage": 10.00
        }
    ]'
<?php
$response = $oimenuClient->batchTables([
    [
        'code' => 5,
        'name' => 'Mesa 5',
        'service_percentage' => 10.00
    ],
    [
        'code' => 6,
        'name' => 'Mesa 6 - Central',
        'service_percentage' => 10.00
    ],
    [
        'code' => 7,
        'name' => 'Mesa 7 - Especial',
        'service_percentage' => 10.00
    ]
]);
Table obj1 = new Table();
obj1.setCode(5);
obj1.setName("Mesa 5");
obj1.setServicePercentage(10.00);

Table obj2 = new Table();
obj2.setCode(6);
obj2.setName("Mesa 6 - Central");
obj2.setServicePercentage(10.00);

Table obj3 = new Table();
obj3.setCode(7);
obj3.setName("Mesa 7 - Especial");
obj3.setServicePercentage(10.00);

List<Table> list = new ArrayList<Table>();
list.add(obj1);
list.add(obj2);
list.add(obj3);

SimpleResult result = oimenuClient.batchTables(list);
var
  simpleResult: TSimpleResult;
  listTable: TListTable;
  table1, table2, table3: TTable;
begin
  table1 := TTable.Create;
  table1.code := 5;
  table1.name := 'Mesa 5';
  table1.servicePercentage := 10.00;

  table2 := TTable.Create;
  table2.code := 6;
  table2.name := 'Mesa 6 - Central';
  table2.servicePercentage := 10.00;

  table3 := TTable.Create;
  table3.code := 7;
  table3.name := 'Mesa 7 - Especial';
  table3.servicePercentage := 10.00;

  listTable := TListTable.Create;
  listTable.Add(table1);
  listTable.Add(table2);
  listTable.Add(table3);

  simpleResult := batchTables('<token>', listTable);

O comando acima retornará um JSON como este:

{
    "success": true,
    "data": []
}

Normalmente este método é utlizado sempre que uma integração é iniciada. Todas as mesas que o estabelecimento possui estão cadastradas em seu sistema e basta enviá-las através deste método para agilizar o processo de integração de ambos os sistemas.

HTTP Request

POST https://developers.oimenu.com.br/api/v1/tables

Corpo da requisição

Lista de objetos Mesa

Nome Descrição Tipo Obrigatório Valor Padrão Valores
code Código integer Sim
name Identificação text Não
service_percentage A taxa cobrada pela casa decimal(4,2) Não 0.00
active Situação integer Não 1 0 - Inativo
1 - Ativo

Atualizar uma mesa

Exemplo de Request:

curl -X PUT "https://developers.oimenu.com.br/api/v1/table/7" \
     -H "Authorization: Bearer <token>" \
     -H "Content-Type: application/json" \
     -d '{
    "name": "Mesa 7 - Área externa",
    "service_percentage": 15.00
}'
<?php
$response = $oimenuClient->updateTable(7, [
    'name' => 'Mesa 7 - Área externa'
    'service_percentage' => 15.00
]);
Table table = new Table();
table.setCode(7);
table.setName("Mesa 7 - Área externa");
table.setServicePercentage(10.00);

TableResult result = oimenuClient.updateTable(table);
var
  tableResult : TTableResult;
  table : TTable;
begin
  table := TTable.Create;
  table.code := 7;
  table.name := 'Mesa 7 - Area externa';
  table.servicePercentage := 10.00;

  tableResult := updateTable('<token>', table);

O comando acima retornará um JSON como este:

{
    "success": true,
    "data": {
        "code": 7,
        "name": "Mesa 7 - Área externa",
        "service_percentage": 15.00
    }
}

Este método é utilizado para atualizar informações de uma mesa no OiMenu, através da integração. Sempre que uma mesa sofrer alterações em seu sistema, como mudança de name (apelido) ou taxa de serviço, por exemplo, você pode utilizar este método para passar ao OiMenu essas informações e deixar as mesas de ambos os sistemas atualizadas.

HTTP Request

PUT https://developers.oimenu.com.br/api/v1/table/<codigo da mesa>

Corpo da requisição

Objeto Mesa

Nome Descrição Tipo Obrigatório Valor Padrão Valores
name Identificação text Não
service_percentage A taxa cobrada pela casa decimal(4,2) Não 0.00
active Situação integer Não 1 0 - Inativo
1 - Ativo

Excluir uma mesa

Exemplo de Request:

curl -X DELETE "https://developers.oimenu.com.br/api/v1/table/7" \
     -H "Authorization: Bearer <token>"
<?php
$response = $oimenuClient->deleteTable(7);
SimpleResult result = oimenuClient.deleteTable(7);
var
  simpleResult : TSimpleResult;
begin
  simpleResult := deleteTable('<token>', 7);

O comando acima retornará um JSON como este:

{
    "success": true,
    "data": []
}

Sempre que uma mesa for removida de seu sistema, sugerimos que utilize este método para remover também do OiMenu. Isso agiliza o processo e deixa ambos os sistemas sempre atualizados.

HTTP Request

DELETE https://developers.oimenu.com.br/api/v1/table/<codigo da mesa>

Corpo da requisição

Vazio

Comandas

Introdução sobre Comandas

No OiMenu, disponibilizamos 2 formas de organização de pedidos feitos: Modo Mesa e Modo Comanda. Esse tipo de funcionamento é configurado ao cadastrar o cardápio do cliente.

No modo comanda, o cliente chega no estabelecimento e recebe uma comanda que possui um QRCode ou tecnologia NFC. Ao realizar um pedido, o tablet lê esse QRcode/NFC e enviamos o número da mesa e comanda para o seu sistema via integração.

As comandas cadastradas no OiMenu possuem:

Nome Descrição
Código Código da comanda. Normalmente seguem uma ordem sequencial.
Serviço A taxa cobrada pela casa. O valor padrão é 0
Ativa É o status da comanda. Ela vem por padrão Ativada, mas pode ser desativada manualmente

Cadastrar uma comanda

Exemplo de Request:

curl -X POST "https://developers.oimenu.com.br/api/v1/card" \
     -H "Authorization: Bearer <token>" \
     -H "Content-Type: application/json" \
     -d '{
        "code": 4,
        "qr_code": "qr-code-4",
        "service_percentage": 10.00
    }'
<?php
$response = $oimenuClient->createCard([
    'code' => 4,
    'qr_code' => 'qr-code-4',
    'service_percentage' => 10.00
]);
Card card = new Card();
card.setCode(4);
card.setQrCode("qr-code-4");
card.setServicePercentage(10.00);

CardResult result = oimenuClient.createCard(card);
var
  cardResult : TCardResult;
  card : TCard;
begin
  card := TCard.Create;
  card.code := 4;
  card.qrCode := 'qr-code-4';
  card.servicePercentage := 10.00;

  cardResult := createCard('<token>', card);

O comando acima retornará um JSON como este:

{
    "success": true,
    "data": {
        "code": 4,
        "qr_code": "qr-code-4",
        "service_percentage": "10.00"
    }
}

Sugerimos que use este método sempre que uma comanda for cadastrada em seu sistema. Com isso, a comanda ficará disponível para o cliente final usar, sem precisar ser adicionado manualmente também no OiMenu.

HTTP Request

POST https://developers.oimenu.com.br/api/v1/card

Corpo da requisição

Objeto Comanda

Nome Descrição Tipo Obrigatório Valor Padrão Valores
code Código da comanda integer Sim
qr_code Código QR ou barras que identifica a comanda text Não
service_percentage A taxa cobrada pela casa decimal(4,2) Não 0.00
active O status da comanda integer Não 1 0 - Inativo
1 - Ativo

Cadastrar comandas em lote

Exemplo de Request:

curl -X POST "https://developers.oimenu.com.br/api/v1/cards" \
     -H "Authorization: Bearer <token>" \
     -H "Content-Type: application/json" \
     -d '[
        {
            "code": 5,
            "qr_code": "qr-code-5",
            "service_percentage": 10.00
        },
        {
            "code": 6,
            "qr_code": "qr-code-6",
            "service_percentage": 10.00
        },
        {
            "code": 7,
            "qr_code": "qr-code-7",
            "service_percentage": 10.00
        }
    ]'
<?php
$response = $oimenuClient->batchCards([
    [
        'code' => 5,
        'qr_code' => 'qr-code-5',
        'service_percentage' => 10.00
    ],
    [
        'code' => 6,
        'qr_code' => 'qr-code-6',
        'service_percentage' => 10.00
    ],
    [
        'code' => 7,
        'qr_code' => 'qr-code-7',
        'service_percentage' => 10.00
    ]
]);
Card obj1 = new Card();
obj1.setCode(5);
obj1.setQrCode("qr-code-5");
obj1.setServicePercentage(10.00);

Card obj2 = new Card();
obj2.setCode(6);
obj2.setQrCode("qr-code-6");
obj2.setServicePercentage(10.00);

Card obj3 = new Card();
obj3.setCode(7);
obj3.setQrCode("qr-code-7");
obj3.setServicePercentage(10.00);

List<Card> list = new ArrayList<Card>();
list.add(obj1);
list.add(obj2);
list.add(obj3);

SimpleResult result = oimenuClient.batchCards(list);
var
  simpleResult: TSimpleResult;
  listCard: TListCard;
  card1, card2, card3: TCard;
begin
  card1 := TCard.Create;
  card1.code := 5;
  card1.qrCode := 'qr-code-5';
  card1.servicePercentage := 10.00;

  card2 := TCard.Create;
  card2.code := 6;
  card2.qrCode := 'qr-code-6';
  card2.servicePercentage := 10.00;

  card3 := TCard.Create;
  card3.code := 7;
  card3.qrCode := 'qr-code-7';
  card3.servicePercentage := 10.00;

  listCard := TListCard.Create;
  listCard.Add(card1);
  listCard.Add(card2);
  listCard.Add(card3);

  simpleResult := batchCards('<token>', listCard);

O comando acima retornará um JSON como este:

{
    "success": true,
    "data": []
}

Normalmente este método é utlizado sempre que uma integração é iniciada. Todas as comandas que o estabelecimento possui estão cadastradas em seu sistema e basta enviá-los através deste método para agilizar o processo de integração de ambos os sistemas.

HTTP Request

POST https://developers.oimenu.com.br/api/v1/cards

Corpo da requisição

Lista de objetos Comanda

Nome Descrição Tipo Obrigatório Valor Padrão Valores
code Código da comanda integer Sim
qr_code Código QR ou barras que identifica a comanda text Não
service_percentage A taxa cobrada pela casa decimal(4,2) Não 0.00
active O status da comanda integer Não 1 0 - Inativo
1 - Ativo

Atualizar uma comanda

Exemplo de Request:

curl -X PUT "https://developers.oimenu.com.br/api/v1/card/7" \
     -H "Authorization: Bearer <token>" \
     -H "Content-Type: application/json" \
     -d '{
    "qr_code": "qr-code-7-atualizado",
    "service_percentage": 15.00
}'
<?php
$response = $oimenuClient->updateCard(7, [
    'qr_code' => 'qr-code-7-atualizado',
    'service_percentage' => 15.00
]);
Card card = new Card();
card.setCode(7);
card.setQrCode("qr-code-7-atualizado");
card.setServicePercentage(15.00);

CardResult result = oimenuClient.updateCard(card);
var
  cardResult : TCardResult;
  card : TCard;
begin
  card := TCard.Create;
  card.code := 7;
  card.qrCode := 'qr-code-7-atualizado';
  card.servicePercentage := 15.00;

  cardResult := updateCard('<token>', card);

O comando acima retornará um JSON como este:

{
    "success": true,
    "data": {
        "code": 7,
        "qr_code": "qr-code-7-atualizado",
        "service_percentage": "15.00"
    }
}

Este método é utilizado para atualizar informações de uma comanda no OiMenu, através da integração. Sempre que uma comanda sofrer alterações em seu sistema, como mudança na taxa de serviço, por exemplo, você pode utilizar este método para passar ao OiMenu essas informações e deixar as comandas de ambos os sistemas atualizadas.

HTTP Request

PUT https://developers.oimenu.com.br/api/v1/card/<codigo da comanda>

Corpo da requisição

Objeto Comanda

Nome Descrição Tipo Obrigatório Valor Padrão Valores
qr_code Código QR ou barras que identifica a comanda text Não
service_percentage A taxa cobrada pela casa decimal(4,2) Não 0.00
active O status da comanda integer Não 1 0 - Inativo
1 - Ativo

Excluir uma comanda

Exemplo de Request:

curl -X DELETE "https://developers.oimenu.com.br/api/v1/card/7" \
     -H "Authorization: Bearer <token>"
<?php
$response = $oimenuClient->deleteCard(7);
SimpleResult result = oimenuClient.deleteCard(7);
var
  simpleResult : TSimpleResult;
begin
  simpleResult := deleteCard('<token>', 7);

O comando acima retornará um JSON como este:

{
    "success": true,
    "data": []
}

Sempre que uma comanda for removida de seu sistema, sugerimos que utilize este método para remover também do OiMenu. Isso agiliza o processo e deixa ambos os sistemas sempre atualizados.

HTTP Request

DELETE https://developers.oimenu.com.br/api/v1/card/<codigo da comanda>

Corpo da requisição

Vazio

Colaboradores

Introdução sobre Colaboradores

O OiMenu também possui um cadastro de colaboradores com alguns níveis de acesso.

Tipo Descrição
Admin Tem acesso total ao sistema
Operador Tem acesso a quase tudo, menos aos relatórios
Garçom Não tem acesso ao sistema. Somente a troca de mesas nos tablets

Quando um tablet sai de uma mesa para outra, o Colaborador do tipo Garçom precisa digitar uma senha previamente cadastrada para alterar o número da mesa. Esse é um recurso de segurança, que impede que um cliente solicite algo para outra mesa.

Os colaboradores cadastrados no OiMenu possuem:

Nome Descrição
Código (ERP) É o código desse usuário em seu sistema. Serve para vicular o mesmo usuário em ambos os sistemas.
Nome Nome de identificação do colaborador
Email Email para acesso ao sistema. Apenas os tipos Admin e Operadores possuem email
Nível de acesso Como explicado acima, os níveis são Admin, Operador e Garçom
Senha Senha de acesso para quando o colaborador acessar o painel ou alterar mesas no tablet
Ativo É a situação do colaborador. Ele vem por padrão Ativo, mas pode ser inativado manualmente

Cadastrar um colaborador

Exemplo de Request:

curl -X POST "https://developers.oimenu.com.br/api/v1/user" \
     -H "Authorization: Bearer <token>" \
     -H "Content-Type: application/json" \
     -d '{
        "code": "3", 
        "name": "Beltrano", 
        "active": 1
    }'
<?php
$response = $oimenuClient->createUser([
    'code' => '3',
    'name' => 'Beltrano',
    'active' => 1
]);
User user = new User();
user.setCode(3);
user.setName("Beltrano");
user.setActive(1);

UserResult result = oimenuClient.createUser(user);
var
  userResult : TUserResult;
  user : TUser;
begin
  user := TUser.Create;
  user.code := 3;
  user.name := 'Beltrano';
  user.active := true;

  userResult := createUser('<token>', user);

O comando acima retornará um JSON como este:

{
    "success": true,
    "data": {
        "code": "3",
        "name": "Beltrano",
        "active": 1
    }
}

Sugerimos que use este método sempre que um colaborador for cadastrado em seu sistema. Com isso, ele já ficará disponível para ser utilizado no OiMenu, sem precisar ser adicionado manualmente em nosso sistema.

Ao adicionar um colaborador, você já deve definir o tipo de acesso que ele terá.

HTTP Request

POST https://developers.oimenu.com.br/api/v1/user

Corpo da requisição

Objeto Colaborador

Nome Descrição Tipo Obrigatório Valor Padrão Valores
code Código text Sim
name Nome text Sim
email E-mail de acesso text Não
password Senha text Não
role Nível de acesso text Não admin admin - Administrador
operator - Operador
waiter - Garçom
active Situação integer Não 1 0 - Inativo
1 - Ativo

Cadastrar colaboradores em lote

Exemplo de Request:

curl -X POST "https://developers.oimenu.com.br/api/v1/users" \
     -H "Authorization: Bearer <token>" \
     -H "Content-Type: application/json" \
     -d '[
        {
            "code": "1",
            "name": "Fulano",
            "active": 1
        },
        {
            "code": "2",
            "name": "Sicrano",
            "active": 0
        },
        {
            "code": "3",
            "name": "Beltrano",
            "active": 1
        }
    ]'
<?php
$response = $oimenuClient->batchUsers([
    [
        'code' => '1',
        'name' => 'Fulano',
        'active' => 1
    ],
    [
        'code' => '2',
        'name' => 'Sicrano',
        'active' => 0
    ],
    [
        'code' => '3',
        'name' => 'Beltrano',
        'active' => 1
    ]
]);
User obj1 = new User();
obj1.setCode(1);
obj1.setName("Fulano");
obj1.setActive(1);

User obj2 = new User();
obj2.setCode(2);
obj2.setName("Sicrano");
obj2.setActive(0);

User obj3 = new User();
obj3.setCode(3);
obj3.setName("Beltrano");
obj3.setActive(1);

List<User> list = new ArrayList<User>();
list.add(obj1);
list.add(obj2);
list.add(obj3);

SimpleResult result = oimenuClient.batchUsers(list);
var
  simpleResult: TSimpleResult;
  listUser: TListUser;
  user1, user2, user3: TUser;
begin
  user1 := TUser.Create;
  user1.code := 1;
  user1.name := 'Fulano';
  user1.active := true;

  user2 := TUser.Create;
  user2.code := 2;
  user2.name := 'Sicrano';
  user2.active := false;

  user3 := TUser.Create;
  user3.code := 3;
  user3.name := 'Beltrano';
  user3.active := true;

  listUser := TListUser.Create;
  listUser.Add(user1);
  listUser.Add(user2);
  listUser.Add(user3);

  simpleResult := batchUsers('<token>', listUser);

O comando acima retornará um JSON como este:

{
    "success": true,
    "data": []
}

Normalmente este método é utlizado sempre que uma integração é iniciada. Todos os colaboradores que o estabelecimento possui estão cadastradas em seu sistema e basta enviá-los através deste método para agilizar o processo de integração de ambos os sistemas.

HTTP Request

POST https://developers.oimenu.com.br/api/v1/users

Corpo da requisição

Lista de objetos Colaborador

Nome Descrição Tipo Obrigatório Valor Padrão Valores
code Código text Sim
name Nome text Sim
email E-mail de acesso text Não
password Senha text Não
role Nível de acesso text Não admin admin - Administrador
operator - Operador
waiter - Garçom
active Situação integer Não 1 0 - Inativo
1 - Ativo

Atualizar um colaborador

Exemplo de Request:

curl -X PUT "https://developers.oimenu.com.br/api/v1/user/3" \
     -H "Authorization: Bearer <token>" \
     -H "Content-Type: application/json" \
     -d '{
        "name": "Beltrano Da Silva",
        "active": 0
    }'
<?php
$response = $oimenuClient->updateUser('3', [
    'name' => 'Beltrano da Silva',
    'active' => 0
]);
User user = new User();
user.setCode(3);
user.setName("Beltrano da Silva");
user.setActive(0);

UserResult result = oimenuClient.updateUser(user);
var
  userResult : TUserResult;
  user : TUser;
begin
  user := TUser.Create;
  user.code := 3;
  user.name := 'Beltrano da Silva';
  user.active := false;

  userResult := updateUser('<token>', user);

O comando acima retornará um JSON como este:

{
    "success": true,
    "data": {
        "code": "3",
        "name": "Beltrano Da Silva",
        "active": 0
    }
}

Este método é utilizado para atualizar informações de um colaborador no OiMenu, através da integração. Sempre um colaborador sofrer alterações em seu sistema, como mudança de name, por exemplo, você pode utilizar este método para passar ao OiMenu essas informações e deixar os colaboradores de ambos os sistemas atualizados.

HTTP Request

PUT https://developers.oimenu.com.br/api/v1/user/<codigo do colaborador>

Corpo da requisição

Objeto Colaborador

Nome Descrição Tipo Obrigatório Valor Padrão Valores
name Nome text Não
email E-mail de acesso text Não
password Senha text Não
role Nível de acesso text Não admin admin - Administrador
operator - Operador
waiter - Garçom
active Situação integer Não 1 0 - Inativo
1 - Ativo

Excluir um colaborador

Exemplo de Request:

curl -X DELETE "https://developers.oimenu.com.br/api/v1/user/3" \
     -H "Authorization: Bearer <token>"
<?php
$response = $oimenuClient->deleteUser('3');
SimpleResult result = oimenuClient.deleteUser(7);
var
  simpleResult : TSimpleResult;
begin
  simpleResult := deleteUser('<token>', 7);

O comando acima retornará um JSON como este:

{
    "success": true,
    "data": []
}

Sempre que um colaborador for removido de seu sistema, sugerimos que utilize este método para remover também do OiMenu. Isso agiliza o processo e deixa ambos os sistemas sempre atualizados.

HTTP Request

DELETE https://developers.oimenu.com.br/api/v1/user/<codigo do colaborador>

Corpo da requisição

Vazio