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
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"
Códigos de Erro
| Código | Descrição |
|---|---|
| 200 | Sucesso |
| 201 | Recurso criado com sucesso |
| 401 | Não autenticado — Token inválido ou ausente |
| 403 | Acesso negado — Token bloqueado ou sem permissão |
| 404 | Recurso não encontrado |
| 409 | Conflito — o registro não pode ser removido (ex.: produto com vendas, marca com produtos) |
| 422 | Validação falhou — Dados enviados são inválidos |
| 429 | Rate limit excedido — Máximo de 120 requisições/minuto |
| 500 | Erro 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
/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
/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
/api/v1/products
Lista todos os produtos da empresa. Suporta filtros:
| Parâmetro | Tipo | Descrição |
|---|---|---|
search | string | Buscar por nome |
category_id | integer | Filtrar por categoria |
per_page | integer | Itens por página (padrão: 30) |
/api/v1/products
Cria um novo produto.
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
name | string | Sim | Nome do produto |
price | number | Sim | Preço de venda |
cost_price | number | — | Preço de custo |
stock | number | — | Quantidade em estoque (entra no histórico como estoque inicial) |
min_stock | integer | — | Estoque mínimo (alerta) |
sku | string | — | Código SKU |
barcode | string | — | Código de barras |
category_id | integer | — | ID da categoria |
description | string | — | Descrição |
is_active | boolean | — | 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"
}'
/api/v1/products/{id}
— Ver detalhes
/api/v1/products/{id}
— Editar produto
/api/v1/products/{id}
— Remover produto
Serviços
/api/v1/services— Listar serviços/api/v1/services— Criar serviço/api/v1/services/{id}— Ver detalhes/api/v1/services/{id}— Editar serviço/api/v1/services/{id}— Remover serviçoCampos para criação/edição:
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
name | string | Sim | Nome do serviço |
price | number | Sim | Preço |
duration | integer | — | Duração em minutos |
category_id | integer | — | ID da categoria |
description | string | — | Descrição |
is_active | boolean | — | Ativo? |
Clientes
/api/v1/customers— Listar clientes/api/v1/customers— Criar cliente/api/v1/customers/{id}— Ver detalhes/api/v1/customers/{id}— Editar cliente/api/v1/customers/{id}— Remover clienteFiltros na listagem: search (busca por nome, email, telefone ou CPF/CNPJ)
Campos para criação/edição:
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
name | string | Sim | Nome |
email | string | — | |
phone | string | — | Telefone |
document | string | — | CPF/CNPJ |
address | string | — | Endereço |
city | string | — | Cidade |
state | string | — | UF (2 letras) |
zip_code | string | — | CEP |
notes | string | — | Observações |
birth_date | date | — | Data de nascimento (YYYY-MM-DD) |
whatsapp | string | — | WhatsApp (padrão: o próprio telefone) |
image | string | — | 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
/api/v1/suppliers— Listar fornecedores/api/v1/suppliers— Criar fornecedor/api/v1/suppliers/{id}— Ver detalhes/api/v1/suppliers/{id}— Editar fornecedor/api/v1/suppliers/{id}— Remover fornecedorFiltro na listagem: search (nome).
Campos: name (obrigatório), email, phone, document (CPF ou CNPJ — define pessoa física/jurídica), address (logradouro), notes
Categorias
/api/v1/categories— Listar categorias/api/v1/categories— Criar categoria/api/v1/categories/{id}— Ver detalhes/api/v1/categories/{id}— Editar categoria/api/v1/categories/{id}— Remover categoriaCampos: 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
/api/v1/brands— Listar marcas/api/v1/brands— Criar marca/api/v1/brands/{id}— Ver detalhes/api/v1/brands/{id}— Editar marca/api/v1/brands/{id}— Remover marcaFiltros: 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
/api/v1/deposits— Listar depósitos/api/v1/deposits— Criar depósito/api/v1/deposits/{id}— Ver detalhes/api/v1/deposits/{id}— Editar depósito/api/v1/deposits/{id}— Remover depósitoFiltros: 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
/api/v1/vehicles— Listar veículos/api/v1/vehicles— Criar veículo/api/v1/vehicles/{id}— Ver detalhes/api/v1/vehicles/{id}— Editar veículo/api/v1/vehicles/{id}— Remover veículoFiltros: 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).
/api/v1/objects— Listar objetos/api/v1/objects— Criar objeto/api/v1/objects/{id}— Ver detalhes/api/v1/objects/{id}— Editar objeto/api/v1/objects/{id}— Remover objetoFiltros: 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
/api/v1/shopping-lists— Listar listas/api/v1/shopping-lists— Criar lista/api/v1/shopping-lists/{id}— Ver detalhes/api/v1/shopping-lists/{id}— Editar lista/api/v1/shopping-lists/{id}— Remover lista/api/v1/shopping-lists/{id}/items— Adicionar item/api/v1/shopping-lists/{id}/items/{itemId}— Editar item/api/v1/shopping-lists/{id}/items/{itemId}— Remover itemFiltros: 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
/api/v1/sales— Listar vendas/api/v1/sales— Criar venda/api/v1/sales/{id}— Detalhes da vendaFiltros: status (pending, completed, cancelled, refunded), customer_id, start_date, end_date (pela data da venda, YYYY-MM-DD).
Campos para criação:
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
items | array | Sim | Ao menos um item |
items.*.product_id / items.*.service_id | integer | Um dos dois | Produto ou serviço do item |
items.*.quantity | number | Sim | Quantidade (aceita fração) |
items.*.unit_price | number | Sim | Preço unitário |
items.*.discount | number | — | Desconto em R$ sobre a linha — somado ao desconto da venda |
customer_id | integer | — | ID do cliente |
payment_method | string | — | cash, debit_card, credit_card, pix, bank_transfer, boleto, check, crediario ou other (padrão: other) |
discount | number | — | Desconto da venda em R$ |
status | string | — | pending, completed ou cancelled (padrão: completed) |
notes | string | — | 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
/api/v1/appointments— Listar agendamentos/api/v1/appointments— Criar agendamento/api/v1/appointments/{id}— Ver detalhes/api/v1/appointments/{id}— Editar agendamento/api/v1/appointments/{id}— Remover agendamentoFiltros: status (scheduled, confirmed, in_progress, completed, cancelled, no_show), start_date, end_date (pela data do agendamento), employee_id
Campos para criação:
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
date | date | Sim | Data (YYYY-MM-DD) |
start_time | string | Sim | Hora início (HH:MM) |
end_time | string | — | Hora fim (padrão: início + duração do(s) serviço(s), ou 1 hora) |
title | string | — | Título (padrão: nome do serviço, ou do cliente) |
customer_id | integer | — | ID do cliente |
service_id | integer | — | ID do serviço |
services | array | — | Vários serviços, no lugar de service_id: [{"id": 3, "quantity": 1}] |
employee_id | integer | — | ID do colaborador — ver /employees (padrão: dono do token) |
status | string | — | Status (padrão: scheduled) |
notes | string | — | 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
/api/v1/expenses— Listar despesas/api/v1/expenses/{id}— Ver detalhesFiltros: status (pending, paid, cancelled), start_date, end_date (pela data da despesa, expense_date)
Contas a Receber
/api/v1/receivables— Listar recebíveis/api/v1/receivables/{id}— Ver detalhesFiltros: status (pending, received, partial, overdue, cancelled), start_date, end_date (pela data de vencimento, due_date)
Estoque
/api/v1/stock-movements— Movimentações de estoqueFiltros: product_id, type (entry, exit, adjustment, loss, return, transfer)
Mesas
/api/v1/tables— Listar mesasCaixa
/api/v1/cash-registers— Listar caixas/api/v1/cash-registers/{id}— Detalhes (com transações)Filtros: status (open, closed)
Carteira
Contas financeiras (bancos, caixa físico). Somente leitura.
/api/v1/financial-accounts— Listar contas com saldo/api/v1/financial-accounts/{id}— Ver conta/api/v1/financial-accounts/{id}/transactions— ExtratoContas: 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.
/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.
/api/v1/delivery-config— Obter configuração de deliveryRetorna: 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
/api/v1/employees— Listar colaboradores ativosDono 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
/api/v1/business-hours— Horário de funcionamentoRetorna 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