/api/v1/conta Nome, plano, validade do acesso e o link do formulário.
Resposta
{ "nome": "Juliana Andrade", "plano": "api", "acesso_ate": "2027-10-18", "formulario_url": "https://…/f/juliana-andrade" }Plano API
Leve o CRM e as simulações para o seu site, CRM, chatbot ou automação: cadastre e altere clientes, imóveis e corretores, receba respostas de formulário, faça simulações completas e receba avisos em tempo real.
Authorization: Bearer sh_live_…Endereço base: https://www.simuladorhabitacional.com/api/v1 · JSON em UTF-8 · datas de nascimento em dd/mm/aaaa, demais datas em ISO 8601 · valores em reais (número, ponto decimal).
curl https://www.simuladorhabitacional.com/api/v1/clientes?limite=5 \
-H "Authorization: Bearer sh_live_SUA_CHAVE"
// JavaScript
const r = await fetch("https://www.simuladorhabitacional.com/api/v1/simulacoes", {
method: "POST",
headers: { Authorization: "Bearer sh_live_SUA_CHAVE", "Content-Type": "application/json" },
body: JSON.stringify({ renda: 3500, nascimento: "10/05/1990", cidade: "Goiânia - GO", valor_imovel: 230000 }),
});
const simulacao = await r.json(); // simulacao.link → página do resultado com a sua marca Erros vêm como { "erro": { "codigo": "…", "mensagem": "…" } }.
| 400 | JSON inválido ou identificador inválido |
| 401 | Sem chave, chave inválida ou revogada |
| 403 | Plano API inativo ou vencido |
| 404 | Registro ou endereço não encontrado (inclusive de outra conta) |
| 422 | Dados inválidos (campo obrigatório, etapa/corretor inexistente, cidade não encontrada) |
| 429 | Mais de 120 requisições por minuto |
Listas: até 500 por página. Criação em lote: até 500 registros por pedido. Cada chave só enxerga os dados da própria conta.
Dados da conta dona da chave.
/api/v1/conta Nome, plano, validade do acesso e o link do formulário.
Resposta
{ "nome": "Juliana Andrade", "plano": "api", "acesso_ate": "2027-10-18", "formulario_url": "https://…/f/juliana-andrade" }Os clientes do funil. Campos: nome*, telefone, email, renda, nascimento (dd/mm/aaaa), cidade ("Cidade - UF"), valor_imovel, entrada, saldo_fgts, fgts3, mais_de_um, possui_imovel, observacoes, respostas (objeto livre), etapa_id ou etapa (nome), corretor_id ou corretor (nome), imovel_id, correspondente_id, motivo_perda_id, valor_venda.
/api/v1/clientes Lista paginada (mais novos primeiro).
| limite | 1 a 500 (padrão 100) |
| pagina | a partir de 1 |
| etapa_id | só desta etapa |
| corretor_id | só deste corretor |
| telefone | busca pelo número |
| e-mail exato | |
| busca | parte do nome |
| desde | criados a partir de (ISO 8601) |
| atualizado_desde | alterados a partir de (ISO 8601) — use para sincronizar |
Resposta
{ "dados": [ { "id": "…", "nome": "Maria Souza", "telefone": "62999990000", "renda": 3500, "etapa_id": "…", "criado_em": "…" } ], "pagina": 1, "limite": 100, "total": 1 }/api/v1/clientes Cria um cliente — ou vários, enviando uma lista (até 500). Sem etapa, entra na primeira etapa do funil.
Corpo
{ "nome": "Maria Souza", "telefone": "62999990000", "renda": 3500, "nascimento": "10/05/1990", "cidade": "Goiânia - GO", "valor_imovel": 230000, "etapa": "Simulado", "corretor": "Ana" }/api/v1/clientes/{id} Um cliente.
/api/v1/clientes/{id} Altera só os campos enviados.
Corpo
{ "observacoes": "Ligar amanhã", "valor_venda": 225000 }/api/v1/clientes/{id}/etapa Move o cliente no funil (aceita nome da etapa). Gera histórico e o webhook cliente.etapa_alterada.
Corpo
{ "etapa": "Aprovado" }/api/v1/clientes/{id}/historico Mudanças de etapa e de corretor, com data.
/api/v1/clientes/{id}/simulacoes Simulações feitas para o cliente, com o link do resultado.
/api/v1/clientes/{id} Exclui o cliente.
Simulação completa com as regras oficiais da Caixa e do Minha Casa Minha Vida (subsídio do FGTS, PRICE e SAC) e comparação com os outros bancos.
/api/v1/simulacoes Simula com os dados enviados ou com os de um cliente (cliente_id). Por padrão salva e devolve o link do resultado com a sua marca (salvar: false para não salvar).
| renda* | renda bruta familiar |
| nascimento* | dd/mm/aaaa do mais velho |
| cidade* | "Cidade - UF" ou código IBGE |
| valor_imovel* | valor de avaliação |
| valor_venda | se diferente da avaliação |
| operacao | novo | usado |
| tipo | apartamento | casa |
| metragem | área privativa (deixa o subsídio exato) |
| entrada | valor disponível |
| saldo_fgts | saldo do FGTS |
| fgts3 | 3 anos de FGTS (true/false) |
| mais_de_um | mais de um comprador ou dependente |
| prazo_meses | prazo desejado (limitado ao máximo pela idade) |
| parcela_max | parcela máxima desejada — mostra quanto libera |
| cliente_id | usa os dados do cliente |
| salvar | padrão true |
| sugerir_imoveis | true: devolve imoveis_ideais — o cliente simulado em cada imóvel à venda, ordenado por caber no bolso e proximidade |
| cidade_preferencia | onde o cliente quer morar (para a proximidade) |
| bairro_preferencia | bairro ou região preferida |
Corpo
{ "renda": 3500, "nascimento": "10/05/1990", "cidade": "Goiânia - GO", "valor_imovel": 230000, "fgts3": true, "saldo_fgts": 8000 }Resposta
{ "id": "…", "link": "https://…/s/…", "programa": "Minha Casa Minha Vida – Faixa 2", "subsidio": 9850.2, "prazo_maximo_meses": 420,
"sac": { "financiamento": 176000, "primeira_parcela": 1049.6, "taxa_efetiva": 0.0723, "prazo_meses": 420, "limitado_por": "renda" },
"price": { … }, "bancos": [ { "banco": "Caixa", "taxa_efetiva": 0.0723, "sac": { "financiamento": 176000, "primeira_parcela": 1049.6 } }, … ],
"renda_ideal": { "price": 3700, "sac": 4100, "credito_price": 186553, "credito_sac": 184000 }, "avisos": [ … ] }/api/v1/simulacoes Últimas simulações (filtro opcional cliente_id).
/api/v1/simulacoes/{id} Uma simulação salva.
Cada conta tem um formulário (/f/<link>) e cada corretor da equipe tem o seu. Pela API você lê e configura as perguntas e envia respostas como se o cliente tivesse preenchido.
/api/v1/formulario Link, mensagem, cor e perguntas do formulário principal (perguntas null = padrão).
/api/v1/formulario Configura o formulário. Perguntas: id, rotulo, tipo (texto, longo, numero, dinheiro, data, sim_nao, escolha, marcar), opcoes, obrigatorio, oculto. Ids padrão (alimentam a simulação): nome, telefone, email, renda, nascimento, cidade, valor_imovel, entrada, saldo_fgts, vinculo, estado_civil, conjuge_renda, divida, aluguel, fgts3, mais_de_um, possui_imovel, observacao.
Corpo
{ "mensagem": "Preencha e receba sua simulação", "cor": "#0e7490", "perguntas": [ { "id": "nome", "rotulo": "Seu nome" }, { "id": "telefone", "rotulo": "WhatsApp" }, { "rotulo": "Tem carro financiado?", "tipo": "sim_nao", "obrigatorio": true } ] }/api/v1/formularios Todos os formulários da conta (o principal e o de cada corretor da equipe).
/api/v1/formulario/respostas Envia uma resposta (cria o cliente no funil, como o formulário do site). Use "formulario" para mandar para o formulário de um corretor da equipe.
Corpo
{ "nome": "Carlos Lima", "telefone": "62988887777", "renda": "4100", "cidade": "Anápolis - GO", "Tem carro financiado?": "Não", "formulario": "ana-corretora" }Campos: nome*, construtora, cidade, bairro, valor, valor_avaliacao, tipo (apartamento|casa|terreno), metragem, operacao (novo|usado), observacoes, ativo, foto_url, site_url. Página do imóvel (/i/<slug>): publicado, slug, finalidade (venda|aluguel), titulo, descricao, fotos (lista de URLs, a primeira é a capa), diferenciais (lista), quartos, banheiros, vagas, endereco, video_url, valor_aluguel, condominio, iptu, unidades_disponiveis, entrega, corretor_id (quem recebe os clientes da página). Clientes vindos da página chegam com origem "landing" e imovel_id.
/api/v1/imoveis Lista.
/api/v1/imoveis Cria (ou vários, em lista).
Corpo
{ "nome": "Residencial Ipê", "cidade": "Anápolis - GO", "valor": 215000, "tipo": "casa", "metragem": 52 }/api/v1/imoveis/{id} Um imóvel.
/api/v1/imoveis/{id} Altera.
/api/v1/imoveis/{id} Exclui.
Campos: nome*, telefone, email, empresa, ativo. O acesso (login) de cada corretor é criado no painel.
/api/v1/corretores Lista os corretores.
/api/v1/corretores Cadastra.
Corpo
{ "nome": "Ana Corretora", "telefone": "62999990000" }/api/v1/corretores/{id} Altera.
/api/v1/corretores/{id} Exclui.
/api/v1/correspondentes Mesmos endereços para correspondentes bancários (/correspondentes/{id}).
Depoimentos exibidos nas páginas. Campos: nome*, texto*, foto_url, nota (1 a 5), publicado, imovel_id (vazio = geral: vitrine e todas as páginas), ordem.
/api/v1/depoimentos Lista.
/api/v1/depoimentos Cria.
Corpo
{ "nome": "Fernanda Lima", "texto": "Consegui meu subsídio!", "nota": 5 }/api/v1/depoimentos/{id} Altera.
/api/v1/depoimentos/{id} Exclui.
Configuração do funil.
/api/v1/etapas Etapas do funil, em ordem. POST/PATCH/DELETE em /etapas e /etapas/{id} (campos: nome, ordem, cor).
/api/v1/motivos-perda Motivos de perda. POST/PATCH/DELETE disponíveis (campo: nome).
/api/v1/mensagens Modelos de mensagem por etapa (somente leitura).
Avisos enviados para o seu sistema em até 1 minuto. Eventos: cliente.criado, cliente.atualizado, cliente.etapa_alterada, cliente.excluido, simulacao.criada. Se o seu endereço não responder 2xx, tentamos de novo até 6 vezes.
/api/v1/webhooks Cadastra (url com https://; eventos opcional). A resposta traz o segredo para conferir a assinatura.
Corpo
{ "url": "https://seusistema.com.br/webhooks/simulador", "eventos": ["cliente.criado", "cliente.etapa_alterada"] }/api/v1/webhooks Lista, com o status do último envio.
/api/v1/webhooks/{id} Remove.
/api/v1/webhooks/teste Envia um evento "teste" para todos os webhooks ativos.
Cada aviso traz X-Simulador-Evento e X-Simulador-Assinatura: sha256=… — o HMAC-SHA256 do corpo com o segredo do webhook. Corpo: { "id", "evento", "criado_em", "dados" }. Responda 2xx em até 10 segundos.
// Node.js (Express)
import crypto from "node:crypto";
app.post("/webhooks/simulador", express.raw({ type: "application/json" }), (req, res) => {
const esperado = "sha256=" + crypto.createHmac("sha256", process.env.SEGREDO).update(req.body).digest("hex");
if (req.get("x-simulador-assinatura") !== esperado) return res.sendStatus(401);
const aviso = JSON.parse(req.body); // { id, evento, criado_em, dados }
res.sendStatus(200);
});
// PHP
$corpo = file_get_contents("php://input");
$ok = hash_equals("sha256=" . hash_hmac("sha256", $corpo, $segredo), $_SERVER["HTTP_X_SIMULADOR_ASSINATURA"] ?? "");