1. Entrada de lead
Homfy Public API
  • Bem vindo
  • Autenticação
    • Emitir token
      POST
    • Renovar token
      POST
  • Imóvel
    • Cadastrar imóvel
      POST
    • Atualizar imóvel
      PUT
    • Cadastrar imóveis em lote
      POST
    • Consultar detalhes do imóvel
      POST
    • Enviar fotos — passo 1: obter URLs
      POST
    • Enviar fotos — passo 2: concluir
      POST
    • Andamento do processamento das fotos
      POST
    • Enviar documento — passo 1: obter URL
      POST
    • Enviar documento — passo 2: concluir
      POST
    • Buscar imóveis
      POST
  • Proprietário
    • Cadastrar proprietário
      POST
    • Atualizar proprietário
      PUT
    • Cadastrar proprietários em lote
      POST
    • Consultar detalhes do proprietário
      POST
    • Buscar proprietários
      POST
    • Vincular proprietário a imóvel
      POST
  • Cliente
    • Cadastrar cliente
      POST
    • Atualizar cliente
      PUT
    • Cadastrar clientes em lote
      POST
    • Consultar detalhes do cliente
      POST
    • Buscar clientes
      POST
    • Atribuir cliente a corretor
      POST
  • Entrada de lead
    • Entregar um lead
      POST
    • Consultar uma entrada de lead
      POST
  • Oportunidade
    • Cadastrar oportunidade
    • Consultar detalhes da oportunidade
    • Buscar oportunidades
    • Listar quadros e etapas
  • Agenciamento
    • Cadastrar agenciamento
    • Consultar detalhes do agenciamento
    • Buscar agenciamentos
    • Listar fluxo e etapas
  • Empreendimento
    • Cadastrar empreendimento
    • Atualizar empreendimento
    • Cadastrar empreendimentos em lote
    • Consultar empreendimento
    • Vincular imóveis ao empreendimento
  • Corretor
    • Consultar corretores
  • Schemas
    • ApiPartnerAuthTokenDTO
    • ApiPartnerAuthTokenResponseDTO
    • ApiPartnerErrorResponseDTO
    • ApiPartnerAuthRefreshTokenDTO
    • ApiPartnerAddressDTO
    • ApiPartnerPropertyDetailDTO
    • ApiPartnerPropertyPriceDTO
    • ApiPartnerPropertyListingDTO
    • ApiPartnerPropertyRegisterDTO
    • ApiPartnerPropertyCreatedDTO
    • ApiPartnerPropertySkippedDTO
    • ApiPartnerPropertyErrorItemDTO
    • ApiPartnerPropertyRegisterResponseDTO
    • ApiPartnerPropertyItemDTO
    • ApiPartnerPropertyBatchRegisterDTO
    • ApiPartnerPropertyUpdateDTO
    • ApiPartnerPropertyUpdateResponseDTO
    • ApiPartnerPropertyFindDTO
    • ApiPartnerListingPriceDTO
    • ApiPartnerListingImageDTO
    • ApiPartnerListingVideoDTO
    • ApiPartnerListingResponseDTO
    • ApiPartnerPropertyDetailResponseDTO
    • ApiPartnerPhotoFileDTO
    • ApiPartnerPhotosInitDTO
    • ApiPartnerPresignedPartDTO
    • ApiPartnerPhotoUploadTargetDTO
    • ApiPartnerPhotosInitResponseDTO
    • ApiPartnerUploadPartDTO
    • ApiPartnerPhotoUploadDTO
    • ApiPartnerPhotosCompleteDTO
    • ApiPartnerPhotoCompleteItemDTO
    • ApiPartnerPhotosCompleteResponseDTO
    • ApiPartnerPhotosStatusDTO
    • ApiPartnerPhotoVariantDTO
    • ApiPartnerPhotoStatusItemDTO
    • ApiPartnerPhotosStatusResponseDTO
    • ApiPartnerDocumentInitDTO
    • ApiPartnerDocumentInitResponseDTO
    • ApiPartnerDocumentCompleteDTO
    • ApiPartnerDocumentCompleteResponseDTO
    • ApiPartnerPropertyFiltroDTO
    • ApiPartnerPropertySearchFiltersDTO
    • ApiPartnerSearchSortDTO
    • ApiPartnerPropertySearchDTO
    • ApiPartnerPropertySummaryDTO
    • ApiPartnerPropertySearchResponseDTO
    • ApiPartnerOwnerSpouseDTO
    • ApiPartnerOwnerRegisterDTO
    • ApiPartnerOwnerCreatedDTO
    • ApiPartnerOwnerSkippedDTO
    • ApiPartnerOwnerErrorItemDTO
    • ApiPartnerOwnerRegisterResponseDTO
    • ApiPartnerOwnerItemDTO
    • ApiPartnerOwnerBatchRegisterDTO
    • ApiPartnerOwnerUpdateDTO
    • ApiPartnerOwnerUpdateResponseDTO
    • ApiPartnerOwnerFindDTO
    • ApiPartnerOwnerSpouseResponseDTO
    • ApiPartnerOwnerDetailResponseDTO
    • ApiPartnerOwnerSearchSortDTO
    • ApiPartnerOwnerSearchFiltersDTO
    • ApiPartnerOwnerSearchDTO
    • ApiPartnerOwnerSummaryDTO
    • ApiPartnerOwnerSearchResponseDTO
    • ApiPartnerOwnerLinkPropertyDTO
    • ApiPartnerOwnerLinkResponseDTO
    • ApiPartnerLeadRegisterDTO
    • ApiPartnerLeadCreatedDTO
    • ApiPartnerLeadSkippedDTO
    • ApiPartnerLeadErrorItemDTO
    • ApiPartnerLeadRegisterResponseDTO
    • ApiPartnerLeadItemDTO
    • ApiPartnerLeadBatchRegisterDTO
    • ApiPartnerLeadUpdateDTO
    • ApiPartnerLeadUpdateResponseDTO
    • ApiPartnerLeadFindDTO
    • ApiPartnerLeadDetailResponseDTO
    • ApiPartnerLeadSearchSortDTO
    • ApiPartnerLeadSearchFiltersDTO
    • ApiPartnerLeadSearchDTO
    • ApiPartnerLeadSummaryDTO
    • ApiPartnerLeadSearchResponseDTO
    • ApiPartnerLeadAssignAgentDTO
    • ApiPartnerLeadAssignAgentResponseDTO
    • ApiPartnerAgentSearchFiltersDTO
    • ApiPartnerOpportunityRegisterDTO
    • ApiPartnerLeadIntakeLeadDTO
    • ApiPartnerAgentSearchDTO
    • ApiPartnerOpportunityRegisterResponseDTO
    • ApiPartnerLeadIntakeReceiveDTO
    • ApiPartnerAgentSummaryDTO
    • ApiPartnerOpportunityFindDTO
    • ApiPartnerLeadIntakeReceiveResponseDTO
    • ApiPartnerAgentSearchResponseDTO
    • ApiPartnerOpportunityLeadRefDTO
    • ApiPartnerLeadIntakeFindDTO
    • ApiPartnerRealtyClusterRegisterDTO
    • ApiPartnerOpportunityAgentRefDTO
    • ApiPartnerLeadIntakeWarningDTO
    • ApiPartnerRealtyClusterCreatedDTO
    • ApiPartnerOpportunityStepRefDTO
    • ApiPartnerLeadIntakeErrorDTO
    • ApiPartnerRealtyClusterSkippedDTO
    • ApiPartnerOpportunityDTO
    • ApiPartnerLeadIntakeDTO
    • ApiPartnerRealtyClusterErrorItemDTO
    • ApiPartnerOpportunitySearchSortDTO
    • ApiPartnerRealtyClusterRegisterResponseDTO
    • ApiPartnerOpportunitySearchFiltersDTO
    • ApiPartnerRealtyClusterItemDTO
    • ApiPartnerOpportunitySearchDTO
    • ApiPartnerRealtyClusterBatchRegisterDTO
    • ApiPartnerOpportunitySearchResponseDTO
    • ApiPartnerRealtyClusterUpdateDTO
    • ApiPartnerOpportunityStepDTO
    • ApiPartnerRealtyClusterAddressResponseDTO
    • ApiPartnerOpportunityBoardDTO
    • ApiPartnerRealtyClusterDetailResponseDTO
    • ApiPartnerOpportunityWorkflowResponseDTO
    • ApiPartnerRealtyClusterFindDTO
    • ApiPartnerPropertyAgencyAddressDTO
    • ApiPartnerRealtyClusterLinkPropertiesDTO
    • ApiPartnerPropertyAgencyRegisterDTO
    • ApiPartnerRealtyClusterLinkedDTO
    • ApiPartnerPropertyAgencyRegisterResponseDTO
    • ApiPartnerRealtyClusterLinkErrorDTO
    • ApiPartnerPropertyAgencyFindDTO
    • ApiPartnerRealtyClusterLinkResponseDTO
    • ApiPartnerPropertyAgencyStepRefDTO
    • ApiPartnerPropertyAgencyAgentRefDTO
    • ApiPartnerPropertyAgencyOwnerRefDTO
    • ApiPartnerPropertyAgencyPropertyRefDTO
    • ApiPartnerPropertyAgencyDTO
    • ApiPartnerPropertyAgencySearchSortDTO
    • ApiPartnerPropertyAgencySearchFiltersDTO
    • ApiPartnerPropertyAgencySearchDTO
    • ApiPartnerPropertyAgencySearchResponseDTO
    • ApiPartnerPropertyAgencyWorkflowStepDTO
    • ApiPartnerPropertyAgencyWorkflowDTO
    • ApiPartnerPropertyAgencyWorkflowResponseDTO
  1. Entrada de lead

Entregar um lead

POST
/partner/v1/lead-intake
Entrega UM lead à Homfy. A Homfy cria sozinha o Cliente (ou reaproveita o que já existe com o mesmo WhatsApp), a Oportunidade (na primeira etapa em andamento do quadro padrão) e, se vier visit_at, a Visita, e encaminha o atendimento: o corretor de agent_whatsapp recebe o lead por WhatsApp; sem corretor (ou com um que a Homfy não acha), o lead entra "Sem atendimento" e o gestor é avisado.
Reexecutável: reenviar o mesmo external_id devolve result: "skipped" (HTTP 200) com a situação atual da entrada, sem reprocessar nem atualizar nada — o corpo novo não é comparado com o antigo. Entrada nova devolve result: "accepted" (HTTP 202) em poucos segundos; o resto acontece em segundo plano.
Três avisos:
1.
O external_id é também o partner_code da Oportunidade criada (consultável por POST /partner/v1/opportunity/find). Por isso não reuse um código que você já mandou em POST /partner/v1/opportunity: o lead falha com PARTNER_CODE_CONFLICT em error.
2.
O processamento é assíncrono: o 202 só confirma o recebimento. O resultado (Cliente, Oportunidade, Visita, atendimento e avisos) se consulta por POST /partner/v1/lead-intake/find.
3.
Cada lead pode disparar WhatsApp para o corretor (quando ele é encontrado) ou para o gestor (quando o lead fica "Sem atendimento"). Não use esta rota para teste em carga nem para importar histórico.
visit_at precisa de fuso (2026-10-10T10:00:00-03:00): sem ele a resposta é 400 e a frase de errorMessage começa com VISIT_AT_WITHOUT_TIMEZONE.

Request

Authorization
JWT Bearer
Add the parameter
Authorization
to Headers
Example:
Authorization: ********************
or
Body Params application/jsonRequired

Example
{
    "external_id": "LEAD-2210",
    "visit_at": "2026-10-10T10:00:00-03:00",
    "acquisition_channel": "paid_social",
    "lead": {
        "name": "Ana Pereira",
        "whatsapp": "(48) 99999-1234",
        "email": "ana@exemplo.com"
    },
    "property_code": "AP-0042",
    "agent_whatsapp": "+55 (48) 98888-7777",
    "message": "Quer visitar no sábado.",
    "acquisition_source": "zap"
}

Request Code Samples

Shell
JavaScript
Java
Swift
Go
PHP
Python
HTTP
C
C#
Objective-C
Ruby
OCaml
Dart
R
Request Request Example
Shell
JavaScript
Java
Swift
curl --location '/partner/v1/lead-intake' \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data-raw '{
    "external_id": "LEAD-2210",
    "visit_at": "2026-10-10T10:00:00-03:00",
    "acquisition_channel": "paid_social",
    "lead": {
        "name": "Ana Pereira",
        "whatsapp": "(48) 99999-1234",
        "email": "ana@exemplo.com"
    },
    "property_code": "AP-0042",
    "agent_whatsapp": "+55 (48) 98888-7777",
    "message": "Quer visitar no sábado.",
    "acquisition_source": "zap"
}'

Responses

🟢200
application/json
O external_id já tinha sido recebido (result: "skipped"): nada foi alterado nem reprocessado, e status é a situação atual daquela entrada. O corpo novo NÃO é comparado com o antigo.
Bodyapplication/json

Example
{
    "result": "accepted",
    "external_id": "LEAD-2210",
    "status": "RECEIVED"
}
🟢202
🟠400
🟠401
🟠403
🟠429
🔴500
Modified at 2026-10-10 23:31:35
Previous
Atribuir cliente a corretor
Next
Consultar uma entrada de lead
Built with