API do Gestão+
Conecte o seu negócio a automações (n8n, Make, Zapier) e a ferramentas de IA com segurança. Disponível a partir do plano Start.
Comece em 3 passos
- 1
Crie uma chave
No painel, vá em Configurações → Integrações e clique em Nova chave (ou Chave de teste para usar dados fictícios). Só o proprietário ou um administrador cria chaves. A chave aparece uma única vez: guarde num cofre de senhas. - 2
Teste a chave
curl https://gestaomais.app/api/v1/ping \ -H "Authorization: Bearer $GESTAO_API_KEY" - 3
Busque dados
curl "https://gestaomais.app/api/v1/clientes?limit=20" \ -H "Authorization: Bearer $GESTAO_API_KEY"
Autenticação
Envie a chave no cabeçalho Authorization: Bearer gm_live_… (ou x-api-key). Cada chave pertence a uma única empresa: a API nunca aceita um id de empresa vindo de fora, então uma chave só enxerga os dados da própria empresa.
Use a chave só no servidor
Nunca coloque a chave em um site, app ou planilha compartilhada. A API não responde a chamadas de navegador (sem CORS) justamente para evitar isso. Guarde a chave nas credenciais da sua automação ou em variáveis de ambiente.
Chaves reais e de teste
| Chave real | Chave de teste | |
|---|---|---|
| Formato | gm_live_… | gm_test_… |
| Dados | Os da sua empresa | Fictícios (os da demonstração), sempre os mesmos |
| Permissões | Leitura e gravação, conforme os escopos | Só leitura |
| Quem pode criar | Planos Start, Pro, Business e Enterprise com assinatura ativa | Também no período de teste grátis |
| Limite | Conforme o plano | 30 req/min · 2.000 por dia · até 2 chaves |
Toda resposta traz ambiente (live ou test) para a sua automação saber de onde vieram os dados.
Planos e limites
| Plano | Requisições por minuto | Por dia | Chaves ativas |
|---|---|---|---|
| Solo, Essencial, Crescimento | — | — | Sem API |
| Start | 60 | 10.000 | 3 |
| Pro | 120 | 50.000 | 10 |
| Business | 300 | 200.000 | 25 |
| Enterprise | 600 (ou conforme contrato) | 1.000.000 | 50 |
Respostas trazem x-ratelimit-limit e x-ratelimit-remaining. Ao passar do limite, a API devolve 429 com Retry-After (segundos). Espere esse tempo antes de tentar de novo. Ver planos
Paginação e filtros
Listas vêm das mais recentes para as mais antigas, com até 100 itens por página (padrão 50). Para a próxima página, envie o next_cursor recebido em cursor. Quando has_more for false, acabou.
{
"data": [ { "id": "…", "nome": "…" } ],
"has_more": true,
"next_cursor": "WyIyMDI2LTEwLTMxVDEyOjAwOjAwWiIsIi4uLiJd",
"ambiente": "live",
"request_id": "req_…"
}Para sincronizar com outro sistema, guarde a data da última leitura e use atualizado_desde. Parâmetro desconhecido ou com valor inválido devolve 400, para nenhum erro de digitação passar despercebido.
Criar e atualizar
Crie com POST /v1/{recurso} e altere com PATCH /v1/{recurso}/{id}, enviando JSON. No PATCH, mande só os campos que mudam. Campos fora da lista abaixo são recusados com 400, para nada ser gravado por engano.
Idempotency-Key: nunca grave duas vezes
Toda criação exige o cabeçalho Idempotency-Key com um identificador único da operação (um UUID, por exemplo). Se a sua automação repetir a chamada com a mesma chave em até 24 horas, a API devolve a resposta original (com o cabeçalho idempotent-replayed: true) em vez de criar outro registro.
curl -X POST https://gestaomais.app/api/v1/clientes \
-H "Authorization: Bearer $GESTAO_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"nome": "Maria Oliveira", "cidade": "Recife", "estado": "PE", "tags": ["site"]}'| Recurso | Escopo | Campos aceitos (* obrigatório na criação) |
|---|---|---|
| clientes | clientes:escrever | nome*, cpf_cnpj, email, telefone, endereco, cep, cidade, estado, observacoes, status, tags |
| produtos | produtos:escrever | nome*, sku, codigo_barras, categoria, unidade, preco_venda, preco_custo, estoque_minimo, fornecedor, descricao, status, tags |
| servicos | servicos:escrever | nome*, categoria, descricao, valor, tempo_estimado_min, status, tags |
| agenda | agenda:escrever | titulo*, descricao, inicio*, fim*, dia_inteiro, local, status, tipo, cliente_id |
| lancamentos | financeiro:escrever | tipo*, descricao*, valor*, data_vencimento, data_pagamento, status, conta_id, categoria_id, cliente_id, tags |
- Vendas, contas e categorias são só leitura pela API. Vendas entram pelo PDV, que cuida do estoque e do caixa.
- O estoque de produtos não é alterado pela API: use as movimentações do painel ou o PDV.
- Os limites de cadastro do plano, a validação de CPF/CNPJ e as travas de lançamentos gerados pelo PDV continuam valendo.
- Cliente, conta e categoria citados num lançamento ou compromisso precisam ser da mesma empresa.
- Agenda usa data e hora com fuso, por exemplo
2026-11-03T14:00:00-03:00.
Webhooks
Em vez de consultar a API o tempo todo, receba um aviso quando algo acontece. Cadastre o endereço em Configurações → Integrações → Webhooks (proprietário ou administrador, a partir do plano Start) e escolha os eventos. O Gestão+ envia um POST com JSON em até 1 minuto depois do evento.
| Evento | Quando | Campos em data |
|---|---|---|
cliente.criado | Cliente criado | id, status |
cliente.atualizado | Cliente atualizado | id, status |
produto.estoque_baixo | Estoque chegou ao mínimo | id, sku, estoque, estoque_minimo |
venda.concluida | Venda concluída no PDV | id, numero, total, cliente_id |
venda.cancelada | Venda cancelada | id, numero, total, cliente_id |
lancamento.criado | Lançamento criado | id, tipo, valor, status, data_vencimento |
lancamento.pago | Lançamento pago | id, tipo, valor, data_pagamento |
agendamento.criado | Compromisso criado | id, inicio, fim, status, cliente_id |
agendamento.atualizado | Compromisso alterado | id, inicio, fim, status, cliente_id |
{
"id": "evt_6f1c2b9e1d2a4b8c9f00123456789abc",
"type": "venda.concluida",
"api_version": "2026-10-31",
"created_at": "2026-10-31T18:42:07.512Z",
"empresa_id": "…",
"data": { "object": "venda", "id": "…", "numero": 1042, "total": 189.9, "cliente_id": "…" }
}Sem dados pessoais no aviso
O aviso traz só o tipo, o id e poucos campos. Para os detalhes (nome, contato, itens), consulte a API com a sua chave, que respeita as permissões que você escolheu.
Confira a assinatura
Cada aviso tem o cabeçalho Gestao-Signature: t=1793472127,v1=…. O v1 é o HMAC-SHA256, em hexadecimal, de {t}.{corpo bruto} com o segredo whsec_… mostrado ao criar o webhook. Recuse avisos com assinatura errada ou com t de mais de 5 minutos atrás. Também vêm Gestao-Event, Gestao-Event-Id e Gestao-Delivery.
import crypto from "node:crypto";
// Use o corpo BRUTO (texto), antes de qualquer JSON.parse.
export function assinaturaValida(corpo, cabecalho, segredo) {
const partes = Object.fromEntries(cabecalho.split(",").map((p) => p.split("=")));
const t = Number(partes.t);
if (!t || Math.abs(Date.now() / 1000 - t) > 300) return false;
const esperado = crypto.createHmac("sha256", segredo).update(`${t}.${corpo}`).digest("hex");
const a = Buffer.from(esperado), b = Buffer.from(partes.v1 ?? "");
return a.length === b.length && crypto.timingSafeEqual(a, b);
}Entrega e novas tentativas
- Responda com status 2xx em até 10 segundos. Processe o aviso depois, em segundo plano, se precisar.
- Sem 2xx, tentamos de novo em 1 min, 5 min, 30 min, 2 h, 6 h, 12 h e 24 h (8 tentativas). Depois disso, o envio aparece como “Falhou” no painel, com botão para reenviar.
- Um aviso pode chegar mais de uma vez e fora de ordem: use
Gestao-Event-Idpara ignorar repetidos. - Endereços só com https, porta 443 e nome de domínio público. Antes de cada envio conferimos o DNS e recusamos domínios que apontam para rede interna. Redirecionamentos não são seguidos: cadastre o endereço final.
- Endpoint que falha sem parar por 3 dias é desativado.
- O botão “Testar” envia um evento
pingpara conferir a integração.
Assistentes de IA (MCP)
O Gestão+ tem um servidor MCP (Model Context Protocol), o padrão que assistentes de IA usam para chamar ferramentas. Conectado, o assistente consegue, por exemplo, listar as contas a receber da semana, conferir o estoque de um produto ou cadastrar um cliente, sempre com as permissões da chave.
| Endereço | https://gestaomais.app/api/mcp |
| Transporte | HTTP (streamable), JSON-RPC via POST, sem sessão |
| Autenticação | Cabeçalho Authorization: Bearer gm_live_… (ou gm_test_…) |
| Limites e registro | Os mesmos da API: cada mensagem conta como uma requisição e aparece em Últimas chamadas |
Comece com uma chave somente leitura
O assistente só enxerga as ferramentas das permissões da chave. Para conversar sobre os números da empresa, uma chave somente leitura basta. Libere escrita só se quiser que a IA cadastre ou altere registros, e prefira testar antes com uma chave de teste, que usa dados fictícios.
claude mcp add --transport http gestao https://gestaomais.app/api/mcp \
--header "Authorization: Bearer $GESTAO_API_KEY"Funciona com clientes MCP que permitem enviar um cabeçalho de autorização. Conectores que exigem login por OAuth ainda não são suportados.
Ferramentas disponíveis (27)
| Ferramenta | O que faz | Permissão |
|---|---|---|
gestao_status | Status da conexão | — |
listar_clientes | Listar clientes | clientes:ler |
buscar_clientes | Buscar clientes por id | clientes:ler |
listar_produtos | Listar produtos | produtos:ler |
buscar_produtos | Buscar produtos por id | produtos:ler |
listar_servicos | Listar serviços | servicos:ler |
buscar_servicos | Buscar serviços por id | servicos:ler |
listar_vendas | Listar vendas | vendas:ler |
buscar_vendas | Buscar vendas por id | vendas:ler |
listar_lancamentos | Listar lançamentos financeiros | financeiro:ler |
buscar_lancamentos | Buscar lançamentos financeiros por id | financeiro:ler |
listar_contas | Listar contas financeiras | financeiro:ler |
buscar_contas | Buscar contas financeiras por id | financeiro:ler |
listar_categorias | Listar categorias financeiras | financeiro:ler |
buscar_categorias | Buscar categorias financeiras por id | financeiro:ler |
listar_agenda | Listar agenda | agenda:ler |
buscar_agenda | Buscar agenda por id | agenda:ler |
criar_clientes | Criar clientes | clientes:escrever |
atualizar_clientes | Atualizar clientes | clientes:escrever |
criar_produtos | Criar produtos | produtos:escrever |
atualizar_produtos | Atualizar produtos | produtos:escrever |
criar_servicos | Criar serviços | servicos:escrever |
atualizar_servicos | Atualizar serviços | servicos:escrever |
criar_agenda | Criar agenda | agenda:escrever |
atualizar_agenda | Atualizar agenda | agenda:escrever |
criar_lancamentos | Criar lançamentos financeiros | financeiro:escrever |
atualizar_lancamentos | Atualizar lançamentos financeiros | financeiro:escrever |
Erros
Erros têm sempre o formato { "error": { "code", "message" }, "request_id" }. Informe o request_id ao suporte para localizarmos a chamada.
| Status | code | Quando |
|---|---|---|
| 400 | invalid_request | Parâmetro desconhecido ou valor inválido. |
| 400 | validation_failed | Corpo com campo faltando, sobrando ou em formato errado. |
| 400 | idempotency_key_required | Criação sem o cabeçalho Idempotency-Key. |
| 401 | unauthorized | Chave ausente, inválida, expirada, revogada ou plano sem API. |
| 403 | insufficient_scope | A chave não tem a permissão da rota. |
| 403 | forbidden_ip | IP fora da lista permitida da chave. |
| 404 | not_found | Recurso ou registro inexistente (ou de outra empresa). |
| 405 | method_not_allowed | O recurso é só leitura. |
| 409 | idempotency_in_progress | A mesma Idempotency-Key ainda está sendo processada. |
| 413 | payload_too_large | Corpo maior que 32 KB. |
| 415 | unsupported_media_type | Corpo sem Content-Type: application/json. |
| 422 | validation_failed | Regra de negócio: limite do plano, CPF/CNPJ inválido, referência de outra empresa… |
| 422 | idempotency_mismatch | Idempotency-Key reaproveitada com outro conteúdo. |
| 429 | rate_limited | Limite por minuto ou por dia atingido. |
| 503 | unavailable | Instabilidade temporária. Tente de novo em instantes. |
Segurança
Guardamos só o hash
O texto da chave não fica salvo em lugar nenhum. Se perder, revogue e crie outra.
Menor permissão
Escolha só os escopos necessários. Para IA, prefira chaves somente leitura.
Dados pessoais protegidos
CPF/CNPJ, e-mail, telefone e endereço só saem (e só podem ser alterados) com o escopo dados_pessoais:ler; sem ele, vêm null.
Validade e revogação
Toda chave expira (30 dias a 1 ano), pode ser revogada na hora e para de funcionar se quem a criou deixar de ser proprietário ou administrador.
Registro de uso
Cada chamada fica registrada por 90 dias (rota, status, IP e tempo), sem o conteúdo.
Isolamento por empresa
A empresa vem sempre da chave. Pedir um id de outra empresa devolve 404.
Automações e IA
Qualquer ferramenta que faça uma requisição HTTP conversa com a API. Nas ferramentas de automação, use o bloco de requisição HTTP com método GET, a URL do recurso e o cabeçalho Authorization guardado como credencial.
n8n
Nó HTTP Request → Authentication: Generic → Header Auth, nome Authorization, valor Bearer gm_live_…
Make
Módulo HTTP → Make a request, com o cabeçalho Authorization.
Zapier
Webhooks by Zapier → Custom Request (GET) com o cabeçalho Authorization.
Assistentes de IA que aceitam ferramentas por OpenAPI (como ações personalizadas) podem importar openapi.json e chamar a API com uma chave somente leitura. Comece com uma chave de teste.
const res = await fetch("https://gestaomais.app/api/v1/lancamentos?tipo=entrada&status=previsto", {
headers: { Authorization: `Bearer ${process.env.GESTAO_API_KEY}` },
});
if (res.status === 429) {
const wait = Number(res.headers.get("retry-after") ?? 60);
// aguarde `wait` segundos e tente de novo
}
const { data, next_cursor } = await res.json();Referência
Endereço base: https://gestaomais.app/api/v1. Valores em reais vêm como número (ex.: 149.9); datas em ISO 8601.
Clientes
Cadastro de clientes da empresa.
GET/v1/clientes
GET/v1/clientes/{id}
POST/v1/clientesclientes:escrever · exige Idempotency-Key
PATCH/v1/clientes/{id}
Filtros
| Parâmetro | Descrição |
|---|---|
status | Situação do cadastro. (ativo, inativo) |
atualizado_desde | Só registros alterados a partir desta data e hora (ISO 8601). Útil para sincronizar. |
Campos (14)
| Campo | Tipo | Descrição |
|---|---|---|
id | uuid | Identificador. |
nome | string | Nome ou razão social. |
cpf_cnpj | string | CPF ou CNPJ. dado pessoal |
email | string | E-mail. dado pessoal |
telefone | string | Telefone. dado pessoal |
endereco | string | Endereço. dado pessoal |
cep | string | CEP. dado pessoal |
cidade | string | Cidade. |
estado | string | UF. |
observacoes | string | Observações internas. dado pessoal |
status | string | ativo ou inativo. |
tags | string[] | Etiquetas. |
created_at | datetime | Criado em (ISO 8601). |
updated_at | datetime | Atualizado em (ISO 8601). |
Produtos
Catálogo de produtos com preço e estoque.
GET/v1/produtos
GET/v1/produtos/{id}
POST/v1/produtosprodutos:escrever · exige Idempotency-Key
PATCH/v1/produtos/{id}
Filtros
| Parâmetro | Descrição |
|---|---|
status | Situação do cadastro. (ativo, inativo) |
categoria | Categoria exata. |
sku | SKU exato. |
codigo_barras | Código de barras exato. |
atualizado_desde | Só registros alterados a partir desta data e hora (ISO 8601). Útil para sincronizar. |
Campos (16)
| Campo | Tipo | Descrição |
|---|---|---|
id | uuid | Identificador. |
nome | string | Nome do produto. |
sku | string | Código interno (SKU). |
codigo_barras | string | Código de barras (EAN). |
categoria | string | Categoria. |
unidade | string | Unidade de venda (UN, KG…). |
preco_venda | number | Preço de venda (R$). |
preco_custo | number | Preço de custo (R$). |
estoque | number | Quantidade em estoque. |
estoque_minimo | number | Estoque mínimo. |
fornecedor | string | Fornecedor principal. |
descricao | string | Descrição. |
status | string | ativo ou inativo. |
tags | string[] | Etiquetas. |
created_at | datetime | Criado em (ISO 8601). |
updated_at | datetime | Atualizado em (ISO 8601). |
Serviços
Catálogo de serviços com valor e tempo estimado.
GET/v1/servicos
GET/v1/servicos/{id}
POST/v1/servicosservicos:escrever · exige Idempotency-Key
PATCH/v1/servicos/{id}
Filtros
| Parâmetro | Descrição |
|---|---|
status | Situação do cadastro. (ativo, inativo) |
categoria | Categoria exata. |
atualizado_desde | Só registros alterados a partir desta data e hora (ISO 8601). Útil para sincronizar. |
Campos (10)
| Campo | Tipo | Descrição |
|---|---|---|
id | uuid | Identificador. |
nome | string | Nome do serviço. |
categoria | string | Categoria. |
descricao | string | Descrição. |
valor | number | Valor (R$). |
tempo_estimado_min | integer | Tempo estimado em minutos. |
status | string | ativo ou inativo. |
tags | string[] | Etiquetas. |
created_at | datetime | Criado em (ISO 8601). |
updated_at | datetime | Atualizado em (ISO 8601). |
Vendas
Vendas do PDV. O detalhe traz itens e pagamentos.
GET/v1/vendas
GET/v1/vendas/{id}inclui itens e pagamentos
Filtros
| Parâmetro | Descrição |
|---|---|
status | Situação exata. |
cliente_id | Vendas de um cliente. |
desde | Feitas a partir de (ISO 8601). |
ate | Feitas até (ISO 8601). |
Campos (12)
| Campo | Tipo | Descrição |
|---|---|---|
id | uuid | Identificador. |
numero | integer | Número sequencial da venda. |
status | string | Situação (concluida, cancelada…). |
cliente_id | uuid | Cliente, quando identificado. |
subtotal | number | Soma dos itens (R$). |
desconto | number | Desconto (R$). |
acrescimo | number | Acréscimo (R$). |
total | number | Total da venda (R$). |
origem | string | Origem (pdv, app…). |
cancelada_em | datetime | Quando foi cancelada. |
created_at | datetime | Criado em (ISO 8601). |
updated_at | datetime | Atualizado em (ISO 8601). |
Lançamentos financeiros
Contas a pagar e a receber.
GET/v1/lancamentos
GET/v1/lancamentos/{id}
POST/v1/lancamentosfinanceiro:escrever · exige Idempotency-Key
PATCH/v1/lancamentos/{id}
Filtros
| Parâmetro | Descrição |
|---|---|
tipo | Tipo do lançamento. (entrada, saida) |
status | Situação. (previsto, pago, atrasado, cancelado) |
vencimento_de | Vencimento a partir de (AAAA-MM-DD). |
vencimento_ate | Vencimento até (AAAA-MM-DD). |
cliente_id | Lançamentos de um cliente. |
atualizado_desde | Só registros alterados a partir desta data e hora (ISO 8601). Útil para sincronizar. |
Campos (16)
| Campo | Tipo | Descrição |
|---|---|---|
id | uuid | Identificador. |
tipo | string | entrada ou saida. |
descricao | string | Descrição. |
valor | number | Valor (R$). |
data_vencimento | date | Vencimento (AAAA-MM-DD). |
data_pagamento | date | Pagamento (AAAA-MM-DD). |
status | string | previsto, pago, atrasado ou cancelado. |
conta_id | uuid | Conta bancária ou caixa. |
categoria_id | uuid | Categoria financeira. |
cliente_id | uuid | Cliente relacionado. |
centro_custo_id | uuid | Centro de custo. |
parcela_num | integer | Número da parcela. |
parcela_total | integer | Total de parcelas. |
tags | string[] | Etiquetas. |
created_at | datetime | Criado em (ISO 8601). |
updated_at | datetime | Atualizado em (ISO 8601). |
Contas financeiras
Contas bancárias, caixas e carteiras.
GET/v1/contas
GET/v1/contas/{id}
Campos (7)
| Campo | Tipo | Descrição |
|---|---|---|
id | uuid | Identificador. |
nome | string | Nome da conta. |
tipo | string | caixa, banco, cartao ou outro. |
saldo_inicial | number | Saldo inicial (R$). |
status | string | ativo ou inativo. |
created_at | datetime | Criado em (ISO 8601). |
updated_at | datetime | Atualizado em (ISO 8601). |
Categorias financeiras
Categorias de entradas e saídas.
GET/v1/categorias
GET/v1/categorias/{id}
Filtros
| Parâmetro | Descrição |
|---|---|
tipo | Tipo da categoria. (entrada, saida) |
Campos (6)
| Campo | Tipo | Descrição |
|---|---|---|
id | uuid | Identificador. |
nome | string | Nome da categoria. |
tipo | string | entrada ou saida. |
cor | string | Cor no painel. |
created_at | datetime | Criado em (ISO 8601). |
updated_at | datetime | Atualizado em (ISO 8601). |
Agenda
Compromissos e atendimentos agendados.
GET/v1/agenda
GET/v1/agenda/{id}
POST/v1/agendaagenda:escrever · exige Idempotency-Key
PATCH/v1/agenda/{id}
Filtros
| Parâmetro | Descrição |
|---|---|
inicio_de | Começa a partir de (ISO 8601). |
inicio_ate | Começa até (ISO 8601). |
status | Situação exata. |
cliente_id | Compromissos de um cliente. |
atualizado_desde | Só registros alterados a partir desta data e hora (ISO 8601). Útil para sincronizar. |
Campos (12)
| Campo | Tipo | Descrição |
|---|---|---|
id | uuid | Identificador. |
titulo | string | Título. |
descricao | string | Descrição. |
inicio | datetime | Início (ISO 8601). |
fim | datetime | Fim (ISO 8601). |
dia_inteiro | boolean | Ocupa o dia inteiro. |
local | string | Local. |
status | string | Situação do compromisso. |
tipo | string | Tipo do compromisso. |
cliente_id | uuid | Cliente relacionado. |
created_at | datetime | Criado em (ISO 8601). |
updated_at | datetime | Atualizado em (ISO 8601). |
Permissões (escopos)
Cadastros
clientes:ler· Ler clientesclientes:escrever· Criar e alterar clientesprodutos:ler· Ler produtos e estoqueprodutos:escrever· Criar e alterar produtosservicos:ler· Ler serviçosservicos:escrever· Criar e alterar serviços
Movimento
vendas:ler· Ler vendas e ordens de serviçovendas:escrever· Lançar vendasfinanceiro:ler· Ler lançamentos financeirosfinanceiro:escrever· Lançar e dar baixaagenda:ler· Ler agendaagenda:escrever· Criar e alterar compromissosnotas:ler· Ler notas fiscais
Sensíveis
relatorios:ler· Ler relatórios e resumosdados_pessoais:ler· Ver CPF, telefone e e-mailwebhooks:gerenciar· Gerenciar webhooks
Os webhooks são gerenciados no painel. O escopo webhooks:gerenciar fica reservado para gerenciá-los pela API numa próxima versão.
Em breve
- Login por OAuth no servidor MCP, para conectores de IA que não aceitam cabeçalho de autorização.
- Gerenciar webhooks pela API (escopo webhooks:gerenciar).
Novidades da API aparecem no changelog. Dúvidas: fale com a gente.