Corretor On API

API REST segura para consulta de parceiros e empreendimentos Helbor.

v1.0.0 · Produção

Autenticação

Todas as requisições (exceto /health) exigem o header:

x-api-key: <sua-chave>

Requisições sem chave ou com chave inválida retornam 401 Unauthorized.

Parceiros

GET /api/partners/lookup Principal

Consulta um parceiro por telefone, e-mail ou CPF/CNPJ. Pelo menos um parâmetro é obrigatório. Quando múltiplos registros são encontrados, retorna o de maior id (mais recente).

ParâmetroTipoObrigatórioDescrição
phonestringCondicionalCelular ou telefone em qualquer formato. O código do país +55 é removido automaticamente.
emailstringCondicionalE-mail exato do parceiro (case-insensitive).
documentstringCondicionalCPF ou CNPJ em qualquer formato (pontos, traços e barras são removidos).
Exemplo — busca por telefone
curl "https://public-api.corretoron.com.br/api/partners/lookup?phone=11983523452" \
  -H "x-api-key: <sua-chave>"
Exemplo — busca por e-mail
curl "https://public-api.corretoron.com.br/api/partners/lookup?email=parceiro@exemplo.com" \
  -H "x-api-key: <sua-chave>"
Exemplo — busca por CPF
curl "https://public-api.corretoron.com.br/api/partners/lookup?document=123.456.789-00" \
  -H "x-api-key: <sua-chave>"
GET /api/partners/health Sem autenticação

Verifica se a API e o banco de dados estão acessíveis.

curl "https://public-api.corretoron.com.br/api/partners/health"

Empreendimentos

GET /api/developments/cities Cidades

Lista as cidades que possuem empreendimentos ativos, com contagem por cidade.

Exemplo
curl "https://public-api.corretoron.com.br/api/developments/cities" \
  -H "x-api-key: <sua-chave>"
GET /api/developments/search Listagem

Busca empreendimentos ativos. Todos os parâmetros são opcionais e combináveis. Suporta busca fuzzy por nome e cidade — erros de digitação são resolvidos automaticamente. Quando fuzzy, a resposta inclui "fuzzy": true e "city_resolved" com o nome da cidade resolvida.

ParâmetroTipoDescrição
qstringBusca por nome (LIKE %q%, com fallback fuzzy).
neighborhoodstringFiltro por bairro (LIKE %neighborhood%).
citystringFiltro por cidade com busca fuzzy (ex: Moji → Mogi das Cruzes).
statusstringFiltro por status: LAN, OBR, OBR_INICIADA, CON, BREVE, FUTURO.
Exemplo — buscar por nome
curl "https://public-api.corretoron.com.br/api/developments/search?q=BRK" \
  -H "x-api-key: <sua-chave>"
Exemplo — filtrar por cidade (com erro de digitação)
curl "https://public-api.corretoron.com.br/api/developments/search?city=Moji" \
  -H "x-api-key: <sua-chave>"
Exemplo — combinar filtros
curl "https://public-api.corretoron.com.br/api/developments/search?city=S%C3%A3o+Paulo&status=LAN" \
  -H "x-api-key: <sua-chave>"
GET /api/developments/:id Detalhes

Retorna todos os dados de um empreendimento: ficha técnica, tabelas de preço, galeria, plantas, materiais de apoio, tour virtual, vídeo e posts de redes sociais. Campos sensíveis retornam "restricted" quando o celular não é de um parceiro cadastrado.

Parâmetros (query string)
ParâmetroTipoObrigatórioDescrição
phonestringOpcionalCelular do parceiro (qualquer formato, ex: 5511983523452 ou 11 9 8352-3452). Se fornecido e cadastrado, libera campos protegidos.
Exemplo — sem phone (campos protegidos = restricted)
curl "https://public-api.corretoron.com.br/api/developments/174" \
  -H "x-api-key: <sua-chave>"
Exemplo — com phone de parceiro cadastrado
curl "https://public-api.corretoron.com.br/api/developments/174?phone=5511983523452" \
  -H "x-api-key: <sua-chave>"

Autenticação de Parceiros

GET /api/auth/find-email Localizar e-mail

Localiza o e-mail cadastrado de um parceiro por telefone ou CPF e retorna apenas a versão mascarada — nunca o endereço completo. Use este endpoint antes de forgot-password para confirmar com o usuário qual e-mail será utilizado.

Query params (ao menos um obrigatório)
ParâmetroTipoDescrição
phonestringCelular ou telefone do parceiro. Aceita qualquer formatação: 11983523452, 11 98352-3452, +5511983523452.
cpfstringCPF do parceiro. Aceita com ou sem pontuação: 123.456.789-00 ou 12345678900.
Exemplos
# Com número sem formatação
curl "https://public-api.corretoron.com.br/api/auth/find-email?phone=11983523452" \
  -H "x-api-key: <sua-chave>"

# Com número formatado (espaço e hífen são aceitos)
curl "https://public-api.corretoron.com.br/api/auth/find-email?phone=11+98352-3452" \
  -H "x-api-key: <sua-chave>"

# Por CPF
curl "https://public-api.corretoron.com.br/api/auth/find-email?cpf=123.456.789-00" \
  -H "x-api-key: <sua-chave>"
Resposta de sucesso (200)
{ "found": true, "email_masked": "co********@ma*********.com" }
Códigos de retorno
CódigoSignificado
200Parceiro encontrado — e-mail mascarado retornado.
400Nenhum parâmetro informado.
401API key ausente ou inválida.
404Nenhum parceiro encontrado com os dados informados.
503Falha de banco de dados.
POST /api/auth/forgot-password Esqueci a senha

Envia um e-mail com link para criação de nova senha. Aceita email, phone ou cpf como identificador do parceiro.

Body (JSON) — ao menos um campo obrigatório
CampoTipoDescrição
emailstringE-mail cadastrado do parceiro.
phonestringCelular ou telefone (com ou sem +55/DDI).
cpfstringCPF do parceiro (com ou sem pontuação).
Exemplo
curl -X POST "https://public-api.corretoron.com.br/api/auth/forgot-password" \
  -H "x-api-key: <sua-chave>" \
  -H "Content-Type: application/json" \
  -d '{"email": "parceiro@exemplo.com"}'
Resposta de sucesso (200)
{ "success": true, "message": "E-mail de redefinição de senha enviado com sucesso." }
Códigos de retorno
CódigoSignificado
200E-mail enviado com sucesso.
400Nenhum campo informado ou e-mail inválido.
401API key ausente ou inválida.
404Parceiro não encontrado com os dados informados.
503Falha de banco de dados ou no envio do e-mail.

Schema da resposta — Parceiros

Parceiro encontrado (200)
{
  "found": true,
  "partner": {
    "name": "Maike Robert",
    "razaoSocial": "",
    "email": "corretoron@maikerobert.com",
    "type": "corretor_imobiliario",
    "cadastroType": "PF",
    "createdAt": "2024-05-10T14:56:57.000Z",
    "gpName": "João Pedro",
    "gpPhone": "(11) 99780-1997",
    "regions": ["Brooklin", "Mogi das Cruzes", "São Bernardo do Campo"]
  }
}
Não encontrado (200)
{ "found": false, "partner": null }
Campos
CampoTipoDescrição
foundbooleanIndica se o parceiro foi localizado.
partner.namestringNome completo do parceiro.
partner.razaoSocialstringRazão social (vazio para PF).
partner.emailstringE-mail cadastrado.
partner.typestringTipo de usuário (ex: corretor, imobiliaria).
partner.cadastroTypestringTipo de cadastro (ex: PF, PJ).
partner.createdAtstring (ISO 8601) | nullData e hora de cadastro do parceiro (UTC).
partner.gpNamestring | nullNome do GP associado, ou null.
partner.gpPhonestring | nullTelefone do GP, ou null.
partner.regionsstring[]Regiões de interesse cadastradas (array de nomes, pode ser vazio).

Schema da resposta — Empreendimentos

/api/developments/cities (200)
{
  "count": 7,
  "cities": [
    { "id": 9668, "name": "São Paulo", "uf": "SP", "total": 36 },
    { "id": 9369, "name": "Mogi das Cruzes", "uf": "SP", "total": 6 }
  ]
}
Campos
CampoTipoDescrição
countnumberTotal de cidades retornadas.
cities[].idnumberID interno da cidade.
cities[].namestringNome da cidade.
cities[].ufstringSigla do estado.
cities[].totalnumberQuantidade de empreendimentos ativos nessa cidade.
/api/developments/search (200)
{
  "count": 2,
  "city_resolved": "Mogi das Cruzes",
  "developments": [
    {
      "id": 174,
      "name": "BRK by Helbor",
      "slug": "brk-by-helbor",
      "neighborhood": "Brooklin",
      "city": "São Paulo",
      "uf": "SP",
      "status": "OBR_INICIADA",
      "status_name": "Obras iniciadas",
      "bedrooms": "1",
      "area": "37 à 43",
      "fuzzy": true
    }
  ]
}
Campos
CampoTipoDescrição
countnumberTotal de resultados.
city_resolvedstringPresente apenas quando a cidade foi resolvida por busca fuzzy.
developments[].idnumberID do empreendimento (usar em /:id).
developments[].namestringNome completo.
developments[].slugstringSlug para URL.
developments[].neighborhoodstringBairro.
developments[].citystringCidade.
developments[].ufstringEstado.
developments[].statusstringCódigo do status: LAN, OBR, OBR_INICIADA, CON, BREVE, FUTURO.
developments[].status_namestringStatus legível: Lançamento, Em obras, Obras iniciadas, Concluído, Em breve, Futuro lançamento.
developments[].bedroomsstringQuantidade de dorm.
developments[].areastringÁrea privativa (m²).
developments[].fuzzybooleanPresente e true quando o resultado veio de busca aproximada.
/api/developments/:id (200) — campos públicos
CampoTipoDescrição
id, name, slugnumber/stringIdentificação do empreendimento.
neighborhood, city, ufstringLocalização.
address, number, cepstringEndereço completo.
latitude, longitudestringCoordenadas geográficas.
status, status_name, status_colorstringStatus do empreendimento (código, legĂ­vel e cor hex).
description, short_descriptionstringDescrição completa e resumida.
incorporator, construction_companystringIncorporadora e construtora.
delivery_datestringPrevisão de entrega (YYYY-MM-DD).
bedrooms, suites, bathroomstringFicha técnica — dormitórios.
area, towers, floors, total_unitsstringFicha técnica — dimensões.
cover_photo, image_open_graphstringFoto de capa e imagem para compartilhamento.
is_partnerbooleanIndica se o phone fornecido é de um parceiro cadastrado.
is_featuredbooleanEmpreendimento em destaque.
is_social_aibooleanPossui posts de redes sociais gerados por IA.
promotion_tablenumberFlag de tabela em promoção.
/api/developments/:id — campos protegidos (requerem phone de parceiro)

Quando phone é omitido ou não pertence a um parceiro cadastrado, esses campos retornam a string "restricted" em vez do valor real.

CampoTipoDescrição
tablesstring[] | "restricted"URLs dos PDFs de tabela de preço.
gallerystring[] | "restricted"URLs das fotos individuais.
imagesstring[] | "restricted"Galeria (alias de gallery, mantido por compatibilidade).
floor_plansstring[] | "restricted"URLs das plantas.
image_thumbsstring[] | "restricted"Thumbnails das fotos.
floor_plan_thumbsstring[] | "restricted"Thumbnails das plantas.
compressed_imagesstring | null | "restricted"URL do ZIP de fotos.
compressed_floor_plansstring | null | "restricted"URL do ZIP de plantas.
video_sharestring | null | "restricted"URL do vídeo de divulgação.
youtubestring | null | "restricted"Link do YouTube.
virtual_tourstring | null | "restricted"URL do tour virtual.
referencesobject[] | "restricted"Materiais de apoio: paper, caderno técnico, pacotes de fotos/plantas, perspectivas.
social_media_postsobject[] | "restricted"Posts de redes sociais (media_url, media_type, post_location, thumb).

Códigos HTTP

StatusSignificado
200Sucesso — verifique o campo found.
400Nenhum parâmetro válido fornecido.
401API key ausente ou inválida.
429Rate limit atingido (100 req/min por IP).
503Banco de dados temporariamente inacessível.
500Erro interno inesperado.