Pular para o conteúdo

Compartilhamento de Imóveis

Esta seção documenta os endpoints e configurações para compartilhamento de anúncios de imóveis, seleções e relatórios.


O sistema de compartilhamento do Garagem permite criar links públicos para:

  • Anúncios individuais (listing)
  • Seleções de imóveis (shortlist)
  • Relatórios para proprietários (seller_report)
  • Roteiros de visita (visit_itinerary)

📖 Documentação completa do endpoint: Veja Sites API - Links de Compartilhamento para detalhes técnicos completos incluindo exemplos de código e integração.

GET /api/sites/share/{token}
POST /api/sites/share/{token} (para links protegidos por senha)

Respostas de Erro:

StatusCódigoDescrição
401password_requiredLink protegido - senha necessária
403password_invalidSenha incorreta
404not_foundToken não encontrado ou inativo
410expiredLink expirado

O sistema permite controlar quais informações são exibidas nos links de compartilhamento através da configuração sharingConfig.fieldVisibility.

Nota: Esta configuração é diferente do campo visibility do anúncio. O campo visibility controla se o anúncio aparece em buscas públicas (public/private). A configuração fieldVisibility controla quais campos são exibidos em links de compartilhamento. Veja Anúncios para mais detalhes.

ValorCampos VisíveisCampos Ocultos
fullRua, número, bairro, cidade, estado, CEPNenhum
neighborhood_onlyBairro, cidade, estadoRua, número, CEP
city_onlyCidade, estadoRua, número, bairro, CEP
hiddenNenhumTodos os campos de endereço
ValorComportamento
exactCoordenadas exatas (latitude/longitude originais)
approximateCoordenadas randomizadas (~500m de raio do ponto original)
hiddenCoordenadas não são retornadas
ValorComportamento
visibleCondomínio (condoFee) e IPTU (propertyTax) visíveis
hiddenCampos financeiros ocultados
ValorComportamento
inheritUsa configuração priceVisibility do próprio anúncio
hiddenForça ocultação do preço em todos os links compartilhados

Nota: A configuração hidden sobrescreve a configuração individual do anúncio.

ValorComportamento
visibleCódigo do anúncio é exibido
hiddenCódigo do anúncio é ocultado

O simulador de financiamento nos links de imóvel à venda em *.garagem.link é controlado por sharingConfig.showFinancialSimulator, em Configurações → Compartilhamento. Não é preciso publicar um site.

ValorComportamento
omitido / truePadrão. Links de venda no chrome mínimo mostram o simulador (bloco vazio, sem template de site)
falseOculta o simulador em *.garagem.link, inclusive se o template publicado do site o exibiria

Nota: fieldVisibility.financials controla condomínio e IPTU, não o simulador. Links abertos no domínio do site publicado continuam seguindo o template do editor (página do imóvel).

{
"sharingConfig": {
"showFinancialSimulator": false,
"fieldVisibility": {
"address": "neighborhood_only",
"coordinates": "approximate",
"financials": "hidden",
"agentInfo": "visible",
"listingCode": "hidden",
"price": "inherit"
}
}
}

Configure quais etapas do workflow não podem ter links de compartilhamento ativos ou criados.

ConfiguraçãoDescrição
hideSharesForStagesLinks existentes retornam 404 quando o anúncio está nessas etapas
preventCreationForStagesNão permite criar novos links para anúncios nessas etapas
autoHideTerminalStagesOculta automaticamente links de anúncios em etapas terminais (ex: “closed”)
ConfiguraçãoDescrição
preventCreationForStatusesNão permite criar novos links para anúncios com esses status
{
"sharingConfig": {
"restrictions": {
"hideSharesForStages": ["closed"],
"preventCreationForStages": [],
"preventCreationForStatuses": ["vendido", "alugado"],
"autoHideTerminalStages": true
}
}
}

Comportamento Padrão: Quando autoHideTerminalStages está ativo (padrão: true), links de anúncios em etapas terminais (como “closed”) automaticamente retornam 404.


O Garagem suporta três modos de domínio para links de compartilhamento:

{
"defaultShareDomain": {
"type": "auto"
}
}

URL gerada: https://{org-slug}.garagem.link/p/{token}

Usa o domínio de um site configurado no Garagem.

{
"defaultShareDomain": {
"type": "site",
"siteId": "uuid-do-site"
}
}

URL gerada: https://www.seusite.com.br/p/{token}

O tenant configura seu domínio para fazer proxy das requisições para a API do Garagem.

{
"defaultShareDomain": {
"type": "custom",
"custom": {
"mode": "proxy",
"domain": "compartilhar.seusite.com.br",
"pathTemplate": "/p/{token}"
}
}
}

Requisitos:

  • Configurar DNS apontando para o servidor do tenant
  • Configurar reverse proxy (nginx, cloudflare, etc.) para encaminhar requisições para https://app.garagem.ai/api/sites/share/{token}

O tenant consome a API do Garagem diretamente e renderiza o conteúdo em seu próprio site/aplicativo.

{
"defaultShareDomain": {
"type": "custom",
"custom": {
"mode": "api",
"domain": "www.seusite.com.br",
"pathTemplate": "/imovel/{token}"
}
}
}

Como Funciona:

  1. Tenant gera link: https://www.seusite.com.br/imovel/abc123
  2. Aplicativo do tenant recebe a requisição
  3. Aplicativo chama: GET https://app.garagem.ai/api/sites/share/abc123
  4. Aplicativo renderiza os dados retornados

Nota: O endpoint /api/sites/share/{token} já suporta CORS, permitindo chamadas de qualquer origem.


{
"type": "listing",
"listing": { ... },
"property": { ... },
"medias": [ ... ]
}
{
"type": "shortlist",
"shortlist": {
"id": "uuid",
"name": "Seleção para João",
"description": "Opções de apartamento 2 quartos"
},
"listings": [ ... ],
"listingCount": 5
}
{
"type": "seller_report",
"listing": { ... },
"property": { ... },
"medias": [ ... ],
"stats": {
"views": 150,
"leads": 12,
"daysOnMarket": 45
}
}
{
"type": "visit_itinerary",
"itinerary": {
"id": "uuid",
"name": "Visitas - Terça 14h",
"scheduledDate": "2024-01-20T14:00:00Z"
},
"stops": [ ... ],
"meetingPoint": { ... },
"routeCache": { ... },
"stopCount": 3
}

Link permanente por organização (entityId = tenantId, resolvido no servidor — o cliente não envia entityId). Renderizado em /c/{token}.

{
"type": "pricing_tool",
"pricingTool": {
"cities": [{ "code": "sp", "label": "São Paulo", "state": "SP" }]
}
}

Configuração do tenant (sharingConfig.pricingTool, em Configurações → Compartilhamento): sellerIntentCreates decide o que um lead vendedor produz — "deal" (padrão, só a negociação) ou "deal_and_draft_listing" (negociação + imóvel/anúncio em rascunho vinculado, quando o cliente informar rua, número, CEP e bairro; passa por geocodificação e detecção de duplicados como qualquer rascunho).

Endpoints públicos auxiliares (mesmo token, CORS aberto, rate-limited):

EndpointMétodoFunção
/api/sites/share/{token}/price-estimatePOSTEstimativa AVM pública (ponto + faixa + confiança; sem sinais internos)
/api/sites/share/{token}/neighborhoods?city=&q=GETAutocomplete de bairros (nomes canônicos)
/api/sites/share/{token}/pricing-leadPOSTCaptura o lead (contato + perfil do imóvel + estimativa exibida) no CRM

Para criar um link protegido:

  1. Ao criar o share token via tRPC, inclua uma senha
  2. Para acessar, faça uma requisição POST com a senha no body
Janela do terminal
curl -X POST https://app.garagem.ai/api/sites/share/{token} \
-H "Content-Type: application/json" \
-d '{"password": "senha123"}'

Links podem ter data de expiração configurada. Após a expiração, retornam status 410 (Gone).

O sistema registra acessos aos links compartilhados, permitindo:

  • Notificações quando clientes visualizam o link
  • Estatísticas de visualização para relatórios
  • Análise de engajamento