MadSSolutions / API
← Voltar

API REST · v1

API pública para integradores, contadores e parceiros técnicos. Auth via Bearer token. Responses em JSON. Rate limit 60 req/min.

🔐 Autenticação

Todas as requisições usam Bearer token no header Authorization. Tokens são emitidos no painel da empresa em Configurações → API.

# Header obrigatório em toda chamada Authorization: Bearer mads_live_xxxxxxxxxxxxxxxx Content-Type: application/json X-Mads-Tenant: cnpj-da-empresa

Base URL: https://api.madssolutions.com.br

⚠️ Nunca exponha o token no frontend. Use proxy backend. Tokens vazados podem ser revogados em Configurações → API → Revogar.

🔬 Diagnóstico

POST/diagnostico/iniciar

Inicia novo diagnóstico para uma empresa. Retorna ID que vai ser usado nos passos seguintes.

POST /diagnostico/iniciar { "cnpj": "00000000000100", "razao_social": "Bar do João LTDA", "segmento": "bar", // bar | mini | clinica | salao "responsavel": "João Silva", "whatsapp": "5561999990000", "email": "joao@bardojoao.com.br", "consentimento_lgpd": true }

Response

{ "id": "diag_01HZ...", "status": "iniciado", "link_responder": "https://app.madssolutions.com.br/diag/01HZ...", "expira_em": "2026-05-09T12:00:00Z" }

📋 NF-e / NFS-e

POST/fiscal/nfse/emitir

Emite NFS-e via Focus NFe ou NFe.io (roteamento automático).

{ "prestador_cnpj": "00000000000100", "tomador": { "cpf_cnpj": "12345678900", "nome": "Maria Cliente" }, "servico": { "codigo_municipal": "4101", "descricao": "Consulta médica pediátrica", "valor": 280.00, "iss_aliquota": 3.0 } }
CampoTipoObrigatório
prestador_cnpjstringsim
tomador.cpf_cnpjstringsim
servico.codigo_municipalstringsim
servico.valordecimalsim

🛡 Sentinela

POST/sentinela/evento

Recebe evento de câmera + faz cross-reference com PDV/estoque/histórico. Threshold 75% antes de notificar humano.

{ "camera_id": "cam-loja-pgdf-01", "timestamp": "2026-05-02T14:32:18Z", "frame_url": "https://r2.../frame.jpg", "deteccao": { "pessoa_id": "p_42", "acao": "item_no_bolso", "confianca": 0.84 } }

GET/sentinela/eventos

Lista eventos com filtros: ?desde=2026-04-01&tipo=furto&status=confirmado

GET/sentinela/dossie/:id

Dossiê completo de um perpetrador: histórico de eventos, frames, valor recuperável, score de reincidência.

💵 Vendas

POST/vendas/registrar

{ "pdv": "stone", "transacao_id": "stn_xyz123", "valor": 128.50, "itens": [ { "sku": "7891234567890", "qtd": 2, "preco": 12.50 } ], "pagamento": "cartao_credito", "timestamp": "2026-05-02T14:32:18Z" }

Efeitos colaterais: baixa estoque, lança no fiscal, atualiza DRE em tempo real.

📦 Estoque

GET/estoque/produtos

Filtros: ?abaixo_minimo=true&categoria=bebidas&vencendo_em=30

POST/estoque/entrada

Lança entrada de mercadoria a partir de NF-e (XML) ou manualmente.

🔔 Webhooks

Configure URL em Configurações → Webhooks. Eventos enviam POST com signature HMAC-SHA256 no header X-Mads-Signature.

EventoPayload contém
diagnostico.concluidoid, score, top_3_oportunidades
nfse.emitidaid, numero, valor, link_pdf
nfse.rejeitadaid, motivo, codigo_sefaz
sentinela.alerta_criticoid, camera, perpetrador, frame_url
estoque.rupturasku, nome, ultimo_giro
fiscal.das_vence_3dcnpj, valor, data_venc

Validação de signature

// Node.js example const sig = req.headers['x-mads-signature']; const expected = crypto.createHmac('sha256', SECRET) .update(JSON.stringify(req.body)) .digest('hex'); if (sig !== expected) return res.status(401).send('invalid');

⚠️ Códigos de erro

StatusCódigoSignificado
400VALIDATION_ERRORPayload inválido. Veja details no JSON de resposta.
401AUTH_INVALIDToken ausente, expirado ou revogado.
403TENANT_FORBIDDENToken não tem acesso a esse CNPJ.
404NOT_FOUNDRecurso (id) não encontrado.
409CONFLICTEstado inconsistente (ex: NFS-e já emitida).
429RATE_LIMITExcedeu 60 req/min. Aguarde 60s ou peça aumento.
500SERVER_ERRORErro interno. Reportar com request_id do header.
503UPSTREAM_DOWNFocus NFe ou SEFAZ indisponíveis. Tente em 5min.

📚 SDKs e exemplos

Em desenvolvimento. Por enquanto, qualquer cliente HTTP funciona. Curl, Postman, Insomnia, Hoppscotch — todos OK.

LinguagemStatus
Node.js / TypeScript✓ disponível · @madssolutions/sdk
Pythonbeta · pip install mads-sdk
PHPem breve
Goem breve

Postman collection: peça por WhatsApp