Documentação da API - ERP Escale Mais Pular para o conteúdo principal
API Docs v1.0

API do ERP Escale Mais

Integre seu sistema ao ERP Escale Mais usando nossa API REST. Acesse dados de produtos, clientes, vendas, agendamentos, estoque e muito mais de forma programática.

Base URL

https://erp.escalemais.com/api/v1
REST
Arquitetura
JSON
Formato de dados
Bearer
Autenticação

Autenticação

Todas as requisições devem incluir o token de autenticação no header Authorization. O token pode ser gerado e gerenciado em Integrações > API, no painel do proprietário no ERP.

curl -X GET https://erp.escalemais.com/api/v1/products \
  -H "Authorization: Bearer seu_token_aqui" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json"
Importante: O token é exibido apenas uma vez ao ser gerado. Guarde-o em local seguro. O proprietário pode bloquear, desbloquear ou revogar o token a qualquer momento pelo painel.

Códigos de Erro

Código Descrição
200Sucesso
201Recurso criado com sucesso
401Não autenticado — Token inválido ou ausente
403Acesso negado — Token bloqueado ou sem permissão
404Recurso não encontrado
409Conflito — o registro não pode ser removido (ex.: produto com vendas, marca com produtos)
422Validação falhou — Dados enviados são inválidos
429Rate limit excedido — Máximo de 120 requisições/minuto
500Erro interno do servidor

Todas as respostas são JSON, inclusive as de erro. Em 422, cada campo inválido vem com suas mensagens:

{
  "errors": {
    "payment_method": ["O método de pagamento selecionado é inválido."],
    "items.0.quantity": ["O campo items.0.quantity é obrigatório."]
  }
}

IDs enviados (customer_id, product_id, category_id…) precisam ser da sua empresa; ID de outra empresa volta como inválido (422) e, na URL, como não encontrado (404).

Paginação

Endpoints que retornam listas usam paginação. Use os parâmetros page e per_page (padrão: 30 — 50 em categorias e mesas, 15 em caixas; máximo: 100). /pipelines e /employees devolvem a lista inteira, sem paginação.

GET /api/v1/products?page=2&per_page=15

// Resposta inclui:
{
  "current_page": 2,
  "data": [...],
  "last_page": 5,
  "per_page": 15,
  "total": 72,
  "next_page_url": "...?page=3",
  "prev_page_url": "...?page=1"
}

Minha Conta

GET /api/v1/me

Retorna os dados do usuário autenticado e sua empresa vinculada.

Exemplo de resposta

{
  "user": {
    "id": 1,
    "name": "João Silva",
    "email": "joao@empresa.com",
    "role": "owner"
  },
  "business": {
    "id": 1,
    "name": "Minha Empresa Ltda",
    "document": "12.345.678/0001-90",
    "phone": "(67) 99999-0000",
    "email": "contato@empresa.com",
    "address": "Rua Exemplo, 123",
    "city": "Campo Grande",
    "state": "MS",
    "zip_code": "79000-000"
  }
}

Dashboard

GET /api/v1/dashboard

Retorna KPIs e resumo financeiro do mês atual. Vendas contam pela data da venda (sem canceladas e estornadas); despesas, pela data da despesa. low_stock_products conta produtos com controle de estoque no mínimo ou abaixo.

Exemplo de resposta

{
  "period": { "start": "2026-02-01", "end": "2026-02-28" },
  "sales": { "count": 148, "total": 45230.50 },
  "expenses": { "count": 32, "total": 12450.00 },
  "customers_count": 256,
  "products_count": 89,
  "services_count": 15,
  "low_stock_products": 3
}

Produtos

GET /api/v1/products

Lista todos os produtos da empresa. Suporta filtros:

ParâmetroTipoDescrição
searchstringBuscar por nome
category_idintegerFiltrar por categoria
per_pageintegerItens por página (padrão: 30)
POST /api/v1/products

Cria um novo produto.

CampoTipoObrigatórioDescrição
namestringSimNome do produto
pricenumberSimPreço de venda
cost_pricenumber—Preço de custo
stocknumber—Quantidade em estoque (entra no histórico como estoque inicial)
min_stockinteger—Estoque mínimo (alerta)
skustring—Código SKU
barcodestring—Código de barras
category_idinteger—ID da categoria
descriptionstring—Descrição
is_activeboolean—Ativo? (padrão: true)

Nas respostas, o preço vem em sale_price e o estoque em stock_quantity — são os nomes do cadastro do ERP, e também são aceitos no envio no lugar de price e stock.

Exemplo

curl -X POST https://erp.escalemais.com/api/v1/products \
  -H "Authorization: Bearer TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Camiseta Escale Mais",
    "price": 79.90,
    "cost_price": 25.00,
    "stock": 100,
    "min_stock": 10,
    "sku": "CAM-001"
  }'
GET /api/v1/products/{id} — Ver detalhes
PUT /api/v1/products/{id} — Editar produto
DELETE /api/v1/products/{id} — Remover produto

Serviços

GET/api/v1/services— Listar serviços
POST/api/v1/services— Criar serviço
GET/api/v1/services/{id}— Ver detalhes
PUT/api/v1/services/{id}— Editar serviço
DELETE/api/v1/services/{id}— Remover serviço

Campos para criação/edição:

CampoTipoObrigatórioDescrição
namestringSimNome do serviço
pricenumberSimPreço
durationinteger—Duração em minutos
category_idinteger—ID da categoria
descriptionstring—Descrição
is_activeboolean—Ativo?

Clientes

GET/api/v1/customers— Listar clientes
POST/api/v1/customers— Criar cliente
GET/api/v1/customers/{id}— Ver detalhes
PUT/api/v1/customers/{id}— Editar cliente
DELETE/api/v1/customers/{id}— Remover cliente

Filtros na listagem: search (busca por nome, email, telefone ou CPF/CNPJ)

Campos para criação/edição:

CampoTipoObrigatórioDescrição
namestringSimNome
emailstring—E-mail
phonestring—Telefone
documentstring—CPF/CNPJ
addressstring—Endereço
citystring—Cidade
statestring—UF (2 letras)
zip_codestring—CEP
notesstring—Observações
birth_datedate—Data de nascimento (YYYY-MM-DD)
whatsappstring—WhatsApp (padrão: o próprio telefone)
imagestring—URL da foto — a imagem é baixada e guardada no ERP

Telefone e WhatsApp são gravados só com dígitos e DDI 55. document vai para CPF (até 11 dígitos) ou CNPJ; address é o logradouro. Telefone já cadastrado: o POST atualiza o cliente existente e responde 200 (em vez de 201), sem criar duplicado.

Fornecedores

GET/api/v1/suppliers— Listar fornecedores
POST/api/v1/suppliers— Criar fornecedor
GET/api/v1/suppliers/{id}— Ver detalhes
PUT/api/v1/suppliers/{id}— Editar fornecedor
DELETE/api/v1/suppliers/{id}— Remover fornecedor

Filtro na listagem: search (nome).

Campos: name (obrigatório), email, phone, document (CPF ou CNPJ — define pessoa física/jurídica), address (logradouro), notes

Categorias

GET/api/v1/categories— Listar categorias
POST/api/v1/categories— Criar categoria
GET/api/v1/categories/{id}— Ver detalhes
PUT/api/v1/categories/{id}— Editar categoria
DELETE/api/v1/categories/{id}— Remover categoria

Campos: name (obrigatório), description. Na edição, também is_active e show_in_pos (aparece no PDV). A mesma categoria serve para produtos e serviços.

Categoria com produtos não pode ser removida (409).

Marcas

GET/api/v1/brands— Listar marcas
POST/api/v1/brands— Criar marca
GET/api/v1/brands/{id}— Ver detalhes
PUT/api/v1/brands/{id}— Editar marca
DELETE/api/v1/brands/{id}— Remover marca

Filtros: search (nome), is_active (true/false). Campos: name (obrigatório, único na empresa), is_active (padrão: true).

A resposta traz products_count. Marca com produtos não pode ser removida (409).

Depósitos

GET/api/v1/deposits— Listar depósitos
POST/api/v1/deposits— Criar depósito
GET/api/v1/deposits/{id}— Ver detalhes
PUT/api/v1/deposits/{id}— Editar depósito
DELETE/api/v1/deposits/{id}— Remover depósito

Filtros: search (nome), is_active (true/false). Campos: name (obrigatório), description, location, is_active (padrão: true).

Ao remover, os produtos e lotes do depósito ficam sem depósito — não são apagados.

Veículos

GET/api/v1/vehicles— Listar veículos
POST/api/v1/vehicles— Criar veículo
GET/api/v1/vehicles/{id}— Ver detalhes
PUT/api/v1/vehicles/{id}— Editar veículo
DELETE/api/v1/vehicles/{id}— Remover veículo

Filtros: search (placa, modelo…), vehicle_type, customer_id, is_active (true/false).

Campos: vehicle_type (obrigatório: carro, moto, caminhao, outro), plate, model — placa ou modelo é obrigatório —, brand, year, color, fuel (flex, gasolina, etanol, diesel, gnv, eletrico, hibrido), chassis, renavam, engine, current_km, notes, customer_id, is_active.

Veículo com ordens de serviço no histórico é desativado em vez de removido; a resposta do DELETE diz qual aconteceu em deactivated.

Objetos

Equipamentos de clientes atendidos em ordens de serviço (assistência técnica).

GET/api/v1/objects— Listar objetos
POST/api/v1/objects— Criar objeto
GET/api/v1/objects/{id}— Ver detalhes
PUT/api/v1/objects/{id}— Editar objeto
DELETE/api/v1/objects/{id}— Remover objeto

Filtros: search, object_type, customer_id, is_active (true/false).

Campos: name (obrigatório, ex.: Notebook Dell Inspiron), object_type (obrigatório: informatica, celular, eletrodomestico, eletronico, maquina, ferramenta, movel, outro), brand, model, serial_number, asset_tag, color, year, accessories, notes, customer_id, is_active.

Objeto com ordens de serviço no histórico é desativado em vez de removido (deactivated na resposta).

Listas de Compras

GET/api/v1/shopping-lists— Listar listas
POST/api/v1/shopping-lists— Criar lista
GET/api/v1/shopping-lists/{id}— Ver detalhes
PUT/api/v1/shopping-lists/{id}— Editar lista
DELETE/api/v1/shopping-lists/{id}— Remover lista
POST/api/v1/shopping-lists/{id}/items— Adicionar item
PUT/api/v1/shopping-lists/{id}/items/{itemId}— Editar item
DELETE/api/v1/shopping-lists/{id}/items/{itemId}— Remover item

Filtros: status (draft, completed), search. Lista: name (padrão: "Lista de dd/mm/aaaa hh:mm"), notes, items (opcional, no mesmo formato do item). Na edição, status marca a lista como concluída ou rascunho.

Item: product_id (do catálogo — nome, SKU, unidade e custo vêm do cadastro) ou name (item avulso), quantity (padrão: 1), unit, unit_cost, note. Na edição do item, também is_purchased.

Produto que já está na lista soma na quantidade da linha existente em vez de duplicar.

Vendas

GET/api/v1/sales— Listar vendas
POST/api/v1/sales— Criar venda
GET/api/v1/sales/{id}— Detalhes da venda

Filtros: status (pending, completed, cancelled, refunded), customer_id, start_date, end_date (pela data da venda, YYYY-MM-DD).

Campos para criação:

CampoTipoObrigatórioDescrição
itemsarraySimAo menos um item
items.*.product_id / items.*.service_idintegerUm dos doisProduto ou serviço do item
items.*.quantitynumberSimQuantidade (aceita fração)
items.*.unit_pricenumberSimPreço unitário
items.*.discountnumber—Desconto em R$ sobre a linha — somado ao desconto da venda
customer_idinteger—ID do cliente
payment_methodstring—cash, debit_card, credit_card, pix, bank_transfer, boleto, check, crediario ou other (padrão: other)
discountnumber—Desconto da venda em R$
statusstring—pending, completed ou cancelled (padrão: completed)
notesstring—Observações

Total = soma dos itens − descontos + delivery_fee. Produtos com controle de estoque têm a baixa feita na hora (com registro em /stock-movements); venda criada como cancelled não mexe no estoque.

Exemplo: Criar venda

curl -X POST https://erp.escalemais.com/api/v1/sales \
  -H "Authorization: Bearer TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "customer_id": 1,
    "payment_method": "pix",
    "discount": 5.00,
    "sale_type": "delivery",
    "source": "pedido_online",
    "delivery_fee": 5.00,
    "delivery_address": "Rua Exemplo, 123",
    "delivery_phone": "5511999998888",
    "items": [
      {
        "product_id": 10,
        "quantity": 2,
        "unit_price": 79.90,
        "discount": 0
      },
      {
        "service_id": 3,
        "quantity": 1,
        "unit_price": 150.00,
        "discount": 10
      }
    ]
  }'

Campos opcionais adicionais: sale_type (takeout, delivery, table, other), source (texto livre, ex.: api, pedido_online — padrão: api), delivery_fee, delivery_address, delivery_phone, delivery_instructions.

Vendas criadas com itens são automaticamente inseridas no pipeline padrão do negócio (se existir).

Agendamentos

GET/api/v1/appointments— Listar agendamentos
POST/api/v1/appointments— Criar agendamento
GET/api/v1/appointments/{id}— Ver detalhes
PUT/api/v1/appointments/{id}— Editar agendamento
DELETE/api/v1/appointments/{id}— Remover agendamento

Filtros: status (scheduled, confirmed, in_progress, completed, cancelled, no_show), start_date, end_date (pela data do agendamento), employee_id

Campos para criação:

CampoTipoObrigatórioDescrição
datedateSimData (YYYY-MM-DD)
start_timestringSimHora início (HH:MM)
end_timestring—Hora fim (padrão: início + duração do(s) serviço(s), ou 1 hora)
titlestring—Título (padrão: nome do serviço, ou do cliente)
customer_idinteger—ID do cliente
service_idinteger—ID do serviço
servicesarray—Vários serviços, no lugar de service_id: [{"id": 3, "quantity": 1}]
employee_idinteger—ID do colaborador — ver /employees (padrão: dono do token)
statusstring—Status (padrão: scheduled)
notesstring—Observações

Edição (PUT): envie só o que muda. date, start_time e end_time são independentes — sem end_time novo, a duração se mantém. service_id troca o serviço do agendamento.

Contas a Pagar

GET/api/v1/expenses— Listar despesas
GET/api/v1/expenses/{id}— Ver detalhes

Filtros: status (pending, paid, cancelled), start_date, end_date (pela data da despesa, expense_date)

Contas a Receber

GET/api/v1/receivables— Listar recebíveis
GET/api/v1/receivables/{id}— Ver detalhes

Filtros: status (pending, received, partial, overdue, cancelled), start_date, end_date (pela data de vencimento, due_date)

Estoque

GET/api/v1/stock-movements— Movimentações de estoque

Filtros: product_id, type (entry, exit, adjustment, loss, return, transfer)

Mesas

GET/api/v1/tables— Listar mesas

Caixa

GET/api/v1/cash-registers— Listar caixas
GET/api/v1/cash-registers/{id}— Detalhes (com transações)

Filtros: status (open, closed)

Carteira

Contas financeiras (bancos, caixa físico). Somente leitura.

GET/api/v1/financial-accounts— Listar contas com saldo
GET/api/v1/financial-accounts/{id}— Ver conta
GET/api/v1/financial-accounts/{id}/transactions— Extrato

Contas: filtros type (bank, cash, other) e is_active (true/false); lista completa, sem paginação. Cada conta traz current_balance = saldo inicial + entradas − saídas.

Extrato (paginado): filtros start_date, end_date, direction (in, out) e source (manual, cash_register_close, expense, receivable, transfer).

Pipelines

Pipelines de produção/preparo com estágios configuráveis. Pedidos criados via API são automaticamente inseridos no pipeline padrão.

GET/api/v1/pipelines— Listar pipelines ativos (com estágios)

Retorna todos os pipelines ativos da empresa com seus estágios (stages) ordenados por posição. Cada estágio possui: name, is_initial, is_final, color.

Configuração de Delivery

Configurações de entrega do negócio: taxas de frete, raio máximo e endereço da empresa.

GET/api/v1/delivery-config— Obter configuração de delivery

Retorna: has_config (bool), fee_fixed (taxa fixa), fee_per_km (taxa por km), max_km (raio máximo), latitude, longitude, business_name, business_address, business_city, business_state, business_phone.

Colaboradores

GET/api/v1/employees— Listar colaboradores ativos

Dono e colaboradores ativos da empresa. Cada item traz id, name, role, position (cargo) e work_schedule. O id é o que vai em employee_id nos agendamentos.

Horário de Funcionamento

GET/api/v1/business-hours— Horário de funcionamento

Retorna business_hours (o horário configurado no ERP, por dia da semana) e timezone (padrão: America/Sao_Paulo).

Pronto para integrar?

Acesse o painel do ERP, vá em Integrações > API e gere seu token. Quer usar o Claude ou o ChatGPT? Veja o MCP.

Acessar ERP Escale Mais