Gestão+

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.

Versão 2026-10-31
REST · JSON · UTF-8
OpenAPI (openapi.json)

Comece em 3 passos

  1. 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. 2

    Teste a chave

    curl https://gestaomais.app/api/v1/ping \
      -H "Authorization: Bearer $GESTAO_API_KEY"
  3. 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 realChave de teste
Formatogm_live_…gm_test_…
DadosOs da sua empresaFictícios (os da demonstração), sempre os mesmos
PermissõesLeitura e gravação, conforme os escoposSó leitura
Quem pode criarPlanos Start, Pro, Business e Enterprise com assinatura ativaTambém no período de teste grátis
LimiteConforme o plano30 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

PlanoRequisições por minutoPor diaChaves ativas
Solo, Essencial, Crescimento——Sem API
Start6010.0003
Pro12050.00010
Business300200.00025
Enterprise600 (ou conforme contrato)1.000.00050

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"]}'
RecursoEscopoCampos aceitos (* obrigatório na criação)
clientesclientes:escrevernome*, cpf_cnpj, email, telefone, endereco, cep, cidade, estado, observacoes, status, tags
produtosprodutos:escrevernome*, sku, codigo_barras, categoria, unidade, preco_venda, preco_custo, estoque_minimo, fornecedor, descricao, status, tags
servicosservicos:escrevernome*, categoria, descricao, valor, tempo_estimado_min, status, tags
agendaagenda:escrevertitulo*, descricao, inicio*, fim*, dia_inteiro, local, status, tipo, cliente_id
lancamentosfinanceiro:escrevertipo*, 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.

EventoQuandoCampos em data
cliente.criadoCliente criadoid, status
cliente.atualizadoCliente atualizadoid, status
produto.estoque_baixoEstoque chegou ao mínimoid, sku, estoque, estoque_minimo
venda.concluidaVenda concluída no PDVid, numero, total, cliente_id
venda.canceladaVenda canceladaid, numero, total, cliente_id
lancamento.criadoLançamento criadoid, tipo, valor, status, data_vencimento
lancamento.pagoLançamento pagoid, tipo, valor, data_pagamento
agendamento.criadoCompromisso criadoid, inicio, fim, status, cliente_id
agendamento.atualizadoCompromisso alteradoid, 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-Id para 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 ping para 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çohttps://gestaomais.app/api/mcp
TransporteHTTP (streamable), JSON-RPC via POST, sem sessão
AutenticaçãoCabeçalho Authorization: Bearer gm_live_… (ou gm_test_…)
Limites e registroOs 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)
FerramentaO que fazPermissão
gestao_statusStatus da conexão—
listar_clientesListar clientesclientes:ler
buscar_clientesBuscar clientes por idclientes:ler
listar_produtosListar produtosprodutos:ler
buscar_produtosBuscar produtos por idprodutos:ler
listar_servicosListar serviçosservicos:ler
buscar_servicosBuscar serviços por idservicos:ler
listar_vendasListar vendasvendas:ler
buscar_vendasBuscar vendas por idvendas:ler
listar_lancamentosListar lançamentos financeirosfinanceiro:ler
buscar_lancamentosBuscar lançamentos financeiros por idfinanceiro:ler
listar_contasListar contas financeirasfinanceiro:ler
buscar_contasBuscar contas financeiras por idfinanceiro:ler
listar_categoriasListar categorias financeirasfinanceiro:ler
buscar_categoriasBuscar categorias financeiras por idfinanceiro:ler
listar_agendaListar agendaagenda:ler
buscar_agendaBuscar agenda por idagenda:ler
criar_clientesCriar clientesclientes:escrever
atualizar_clientesAtualizar clientesclientes:escrever
criar_produtosCriar produtosprodutos:escrever
atualizar_produtosAtualizar produtosprodutos:escrever
criar_servicosCriar serviçosservicos:escrever
atualizar_servicosAtualizar serviçosservicos:escrever
criar_agendaCriar agendaagenda:escrever
atualizar_agendaAtualizar agendaagenda:escrever
criar_lancamentosCriar lançamentos financeirosfinanceiro:escrever
atualizar_lancamentosAtualizar lançamentos financeirosfinanceiro:escrever

Erros

Erros têm sempre o formato { "error": { "code", "message" }, "request_id" }. Informe o request_id ao suporte para localizarmos a chamada.

StatuscodeQuando
400invalid_requestParâmetro desconhecido ou valor inválido.
400validation_failedCorpo com campo faltando, sobrando ou em formato errado.
400idempotency_key_requiredCriação sem o cabeçalho Idempotency-Key.
401unauthorizedChave ausente, inválida, expirada, revogada ou plano sem API.
403insufficient_scopeA chave não tem a permissão da rota.
403forbidden_ipIP fora da lista permitida da chave.
404not_foundRecurso ou registro inexistente (ou de outra empresa).
405method_not_allowedO recurso é só leitura.
409idempotency_in_progressA mesma Idempotency-Key ainda está sendo processada.
413payload_too_largeCorpo maior que 32 KB.
415unsupported_media_typeCorpo sem Content-Type: application/json.
422validation_failedRegra de negócio: limite do plano, CPF/CNPJ inválido, referência de outra empresa…
422idempotency_mismatchIdempotency-Key reaproveitada com outro conteúdo.
429rate_limitedLimite por minuto ou por dia atingido.
503unavailableInstabilidade 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

clientes:ler

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âmetroDescrição
statusSituação do cadastro. (ativo, inativo)
atualizado_desdeSó registros alterados a partir desta data e hora (ISO 8601). Útil para sincronizar.
Campos (14)
CampoTipoDescrição
iduuidIdentificador.
nomestringNome ou razão social.
cpf_cnpjstringCPF ou CNPJ.
dado pessoal
emailstringE-mail.
dado pessoal
telefonestringTelefone.
dado pessoal
enderecostringEndereço.
dado pessoal
cepstringCEP.
dado pessoal
cidadestringCidade.
estadostringUF.
observacoesstringObservações internas.
dado pessoal
statusstringativo ou inativo.
tagsstring[]Etiquetas.
created_atdatetimeCriado em (ISO 8601).
updated_atdatetimeAtualizado em (ISO 8601).

Produtos

produtos:ler

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âmetroDescrição
statusSituação do cadastro. (ativo, inativo)
categoriaCategoria exata.
skuSKU exato.
codigo_barrasCódigo de barras exato.
atualizado_desdeSó registros alterados a partir desta data e hora (ISO 8601). Útil para sincronizar.
Campos (16)
CampoTipoDescrição
iduuidIdentificador.
nomestringNome do produto.
skustringCódigo interno (SKU).
codigo_barrasstringCódigo de barras (EAN).
categoriastringCategoria.
unidadestringUnidade de venda (UN, KG…).
preco_vendanumberPreço de venda (R$).
preco_custonumberPreço de custo (R$).
estoquenumberQuantidade em estoque.
estoque_minimonumberEstoque mínimo.
fornecedorstringFornecedor principal.
descricaostringDescrição.
statusstringativo ou inativo.
tagsstring[]Etiquetas.
created_atdatetimeCriado em (ISO 8601).
updated_atdatetimeAtualizado em (ISO 8601).

Serviços

servicos:ler

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âmetroDescrição
statusSituação do cadastro. (ativo, inativo)
categoriaCategoria exata.
atualizado_desdeSó registros alterados a partir desta data e hora (ISO 8601). Útil para sincronizar.
Campos (10)
CampoTipoDescrição
iduuidIdentificador.
nomestringNome do serviço.
categoriastringCategoria.
descricaostringDescrição.
valornumberValor (R$).
tempo_estimado_minintegerTempo estimado em minutos.
statusstringativo ou inativo.
tagsstring[]Etiquetas.
created_atdatetimeCriado em (ISO 8601).
updated_atdatetimeAtualizado em (ISO 8601).

Vendas

vendas:ler
lista vazia com chave de teste

Vendas do PDV. O detalhe traz itens e pagamentos.

GET/v1/vendas

GET/v1/vendas/{id}inclui itens e pagamentos

Filtros

ParâmetroDescrição
statusSituação exata.
cliente_idVendas de um cliente.
desdeFeitas a partir de (ISO 8601).
ateFeitas até (ISO 8601).
Campos (12)
CampoTipoDescrição
iduuidIdentificador.
numerointegerNúmero sequencial da venda.
statusstringSituação (concluida, cancelada…).
cliente_iduuidCliente, quando identificado.
subtotalnumberSoma dos itens (R$).
descontonumberDesconto (R$).
acrescimonumberAcréscimo (R$).
totalnumberTotal da venda (R$).
origemstringOrigem (pdv, app…).
cancelada_emdatetimeQuando foi cancelada.
created_atdatetimeCriado em (ISO 8601).
updated_atdatetimeAtualizado em (ISO 8601).

Lançamentos financeiros

financeiro:ler

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âmetroDescrição
tipoTipo do lançamento. (entrada, saida)
statusSituação. (previsto, pago, atrasado, cancelado)
vencimento_deVencimento a partir de (AAAA-MM-DD).
vencimento_ateVencimento até (AAAA-MM-DD).
cliente_idLançamentos de um cliente.
atualizado_desdeSó registros alterados a partir desta data e hora (ISO 8601). Útil para sincronizar.
Campos (16)
CampoTipoDescrição
iduuidIdentificador.
tipostringentrada ou saida.
descricaostringDescrição.
valornumberValor (R$).
data_vencimentodateVencimento (AAAA-MM-DD).
data_pagamentodatePagamento (AAAA-MM-DD).
statusstringprevisto, pago, atrasado ou cancelado.
conta_iduuidConta bancária ou caixa.
categoria_iduuidCategoria financeira.
cliente_iduuidCliente relacionado.
centro_custo_iduuidCentro de custo.
parcela_numintegerNúmero da parcela.
parcela_totalintegerTotal de parcelas.
tagsstring[]Etiquetas.
created_atdatetimeCriado em (ISO 8601).
updated_atdatetimeAtualizado em (ISO 8601).

Contas financeiras

financeiro:ler

Contas bancárias, caixas e carteiras.

GET/v1/contas

GET/v1/contas/{id}

Campos (7)
CampoTipoDescrição
iduuidIdentificador.
nomestringNome da conta.
tipostringcaixa, banco, cartao ou outro.
saldo_inicialnumberSaldo inicial (R$).
statusstringativo ou inativo.
created_atdatetimeCriado em (ISO 8601).
updated_atdatetimeAtualizado em (ISO 8601).

Categorias financeiras

financeiro:ler

Categorias de entradas e saídas.

GET/v1/categorias

GET/v1/categorias/{id}

Filtros

ParâmetroDescrição
tipoTipo da categoria. (entrada, saida)
Campos (6)
CampoTipoDescrição
iduuidIdentificador.
nomestringNome da categoria.
tipostringentrada ou saida.
corstringCor no painel.
created_atdatetimeCriado em (ISO 8601).
updated_atdatetimeAtualizado em (ISO 8601).

Agenda

agenda:ler

Compromissos e atendimentos agendados.

GET/v1/agenda

GET/v1/agenda/{id}

POST/v1/agendaagenda:escrever · exige Idempotency-Key

PATCH/v1/agenda/{id}

Filtros

ParâmetroDescrição
inicio_deComeça a partir de (ISO 8601).
inicio_ateComeça até (ISO 8601).
statusSituação exata.
cliente_idCompromissos de um cliente.
atualizado_desdeSó registros alterados a partir desta data e hora (ISO 8601). Útil para sincronizar.
Campos (12)
CampoTipoDescrição
iduuidIdentificador.
titulostringTítulo.
descricaostringDescrição.
iniciodatetimeInício (ISO 8601).
fimdatetimeFim (ISO 8601).
dia_inteirobooleanOcupa o dia inteiro.
localstringLocal.
statusstringSituação do compromisso.
tipostringTipo do compromisso.
cliente_iduuidCliente relacionado.
created_atdatetimeCriado em (ISO 8601).
updated_atdatetimeAtualizado em (ISO 8601).

Permissões (escopos)

Cadastros

  • clientes:ler · Ler clientes
  • clientes:escrever · Criar e alterar clientes
  • produtos:ler · Ler produtos e estoque
  • produtos:escrever · Criar e alterar produtos
  • servicos:ler · Ler serviços
  • servicos:escrever · Criar e alterar serviços

Movimento

  • vendas:ler · Ler vendas e ordens de serviço
  • vendas:escrever · Lançar vendas
  • financeiro:ler · Ler lançamentos financeiros
  • financeiro:escrever · Lançar e dar baixa
  • agenda:ler · Ler agenda
  • agenda:escrever · Criar e alterar compromissos
  • notas:ler · Ler notas fiscais

Sensíveis

  • relatorios:ler · Ler relatórios e resumos
  • dados_pessoais:ler · Ver CPF, telefone e e-mail
  • webhooks: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.