Pular para o conteúdo

Campos Customizados e Dados Estruturados

Esta documentação explica como usar diferentes tipos de campos na API do Garagem: marketing attribution, preferências de busca, e campos customizados.


Os campos de marketing attribution são processados pelo sistema de rastreamento de atribuição e devem ser enviados no nível superior da requisição (não dentro de custom).

{
"utmSource": "google",
"utmMedium": "cpc",
"utmCampaign": "apartamentos-zona-sul",
"source": "Google Ads",
"campaign": "Campanha Verão 2024",
"marketingChannelInstanceId": "uuid-do-canal-marketing"
}
  • utmSource - Fonte do tráfego (ex: “google”, “facebook”, “direct”)
  • utmMedium - Meio de marketing (ex: “cpc”, “organic”, “social”, “email”)
  • utmCampaign - Nome da campanha (ex: “apartamentos-zona-sul”, “lancamento-2024”)
  • source - Origem legível do lead (ex: “Google Ads”, “Facebook Ads”, “Site”)
  • campaign - Nome legível da campanha (ex: “Campanha Verão 2024”)
  • marketingChannelInstanceId - ID do canal de marketing configurado no sistema
Janela do terminal
curl -X POST https://app.garagem.ai/api/v1/crm/deals \
-H "Authorization: Bearer sua_api_key" \
-H "Content-Type: application/json" \
-d '{
"title": "Lead do Google Ads",
"dealType": "rental",
"stage": "lead",
"status": "open",
"currency": "BRL",
"utmSource": "google",
"utmMedium": "cpc",
"utmCampaign": "apartamentos-zona-sul",
"source": "Google Ads",
"campaign": "Apartamentos Zona Sul",
"marketingChannelInstanceId": "uuid-do-canal-marketing",
"contacts": [
{
"name": "João Silva",
"email": "[email protected]",
"phone": "+5511999999999",
"role": "buyer"
}
]
}'

Para parâmetros UTM adicionais (utm_term, utm_content), você pode armazená-los em custom:

{
"custom": {
"utm_term": "apartamento 2 quartos",
"utm_content": "ad-variation-a",
"landingPage": "/imoveis/apartamento-123",
"referrer": "https://www.google.com"
}
}

Para negociações (deals), use estes campos específicos em custom para configurar preferências de busca. Estes campos são usados pelo sistema de recomendação de imóveis.

{
"custom": {
"maxPrice": 4000,
"minPrice": 2000,
"locations": ["Zona Sul", "Copacabana"],
"propertyTypes": ["apartment", "house"],
"bedrooms": 2,
"bathrooms": 1,
"suites": 1,
"minArea": 60,
"maxArea": 120,
"searchPolygon": {
/* GeoJSON polygon */
},
"geographicAreaId": "uuid-da-area-geografica"
}
}
  • maxPrice - Preço máximo (número)
  • minPrice - Preço mínimo (número)
  • locations - Array de localizações preferidas (ex: [“Zona Sul”, “Copacabana”])
  • propertyTypes - Array de tipos de imóvel (ex: [“apartment”, “house”])
  • bedrooms - Número mínimo de quartos (número)
  • bathrooms - Número mínimo de banheiros (número)
  • suites - Número mínimo de suítes (número)
  • minArea - Área mínima em m² (número)
  • maxArea - Área máxima em m² (número)
  • searchPolygon - Polígono de busca em formato GeoJSON (objeto)
  • geographicAreaId - ID da área geográfica configurada no sistema (UUID)
Janela do terminal
curl -X POST https://app.garagem.ai/api/v1/crm/deals \
-H "Authorization: Bearer sua_api_key" \
-H "Content-Type: application/json" \
-d '{
"title": "Cliente buscando apartamento",
"dealType": "rental",
"stage": "lead",
"status": "open",
"currency": "BRL",
"contacts": [
{
"name": "Maria Santos",
"email": "[email protected]",
"phone": "+5511999999999",
"role": "buyer"
}
],
"custom": {
"maxPrice": 3500,
"minPrice": 2500,
"locations": ["Zona Sul", "Copacabana", "Ipanema"],
"propertyTypes": ["apartment"],
"bedrooms": 2,
"bathrooms": 1,
"minArea": 60,
"maxArea": 100
}
}'

Importante:

  • Estes campos são usados pelo sistema de recomendação automática de imóveis
  • Use os nomes exatos acima - não use variações como orçamento, quartos, banheiros
  • O sistema irá recomendar imóveis que correspondam a estas preferências

O campo custom permite armazenar qualquer dado adicional que você precise, além dos campos estruturados acima.

Use campos customizados para:

  • Dados específicos do seu negócio
  • Metadados adicionais
  • Informações que não se encaixam nos campos estruturados
  • Dados temporários ou experimentais

O campo custom é um objeto JSON flexível:

{
"custom": {
"campo1": "valor1",
"campo2": 123,
"campo3": true,
"campo4": ["item1", "item2"],
"campo5": {
"subcampo": "valor"
}
}
}
{
"custom": {
"observacoes": "Cliente interessado em imóveis próximos ao metrô",
"aceita_financiamento": true,
"prazo_mudanca": "2024-06-01",
"tipo_contrato_preferido": "temporada",
"pet_friendly": true,
"fumante": false,
"observacoes_especiais": "Necessita vaga de garagem coberta"
}
}
{
"custom": {
"descricao_detalhada": "Apartamento reformado com vista para o mar",
"mobiliado": true,
"aceita_pet": true,
"aceita_financiamento": true,
"destaque": true,
"destaque_ate": "2024-12-31",
"observacoes_internas": "Proprietário prefere inquilino sem filhos",
"tags": ["reformado", "vista-mar", "mobiliado"],
"metadados": {
"origem_importacao": "grupozap",
"id_externo": "12345",
"ultima_sincronizacao": "2024-01-15T10:30:00Z"
}
}
}

Use o parâmetro customFilters na listagem para filtrar por campos dentro de custom:

Janela do terminal
# Filtrar por campo customizado
curl -X GET "https://app.garagem.ai/api/v1/crm/deals?customFilters=%7B%22aceita_financiamento%22%3Atrue%7D" \
-H "Authorization: Bearer sua_api_key"
# Filtrar por múltiplos campos
curl -X GET "https://app.garagem.ai/api/v1/crm/deals?customFilters=%7B%22pet_friendly%22%3Atrue%2C%22mobiliado%22%3Atrue%7D" \
-H "Authorization: Bearer sua_api_key"

Nota: O customFilters deve ser uma string JSON codificada em URL. Exemplo:

  • JSON: {"aceita_financiamento":true}
  • URL encoded: %7B%22aceita_financiamento%22%3Atrue%7D

Para anúncios (listings), você pode usar campos customizados para armazenar informações adicionais específicas do anúncio.

Além do campo custom, listings também suportam:

  • typeSpecificData - Dados específicos do tipo (rental/sale)
  • acceptanceCriteria - Critérios de aceitação do proprietário
  • marketingChannelInstanceId - ID do canal de marketing
Janela do terminal
curl -X POST https://app.garagem.ai/api/v1/real-estate/properties \
-H "Authorization: Bearer sua_api_key" \
-H "Content-Type: application/json" \
-d '{
"property": {
"title": "Apartamento 2 quartos - Copacabana",
"type": "apartment",
"bedrooms": 2,
"bathrooms": 1,
"totalArea": "75"
},
"location": {
"address": "Rua Example, 123",
"neighborhood": "Copacabana",
"city": "Rio de Janeiro",
"state": "RJ",
"zipCode": "22020-000"
},
"listings": [
{
"title": "Apartamento 2 quartos para alugar",
"type": "rental",
"price": "3500.00",
"currency": "BRL",
"stage": "active",
"marketingChannelInstanceId": "uuid-do-canal-marketing",
"custom": {
"mobiliado": true,
"aceita_pet": true,
"destaque": true,
"tags": ["reformado", "vista-mar"],
"observacoes_internas": "Proprietário prefere inquilino sem filhos"
},
"typeSpecificData": {
"deposit": 7000,
"iptu": 200,
"condominiumFee": 500
},
"acceptanceCriteria": {
"minIncome": 10500,
"requiresGuarantor": true,
"petAllowed": true
}
}
]
}'
{
"typeSpecificData": {
"deposit": 7000,
"iptu": 200,
"condominiumFee": 500,
"rentalPeriod": "12 meses",
"furnished": true
}
}
{
"typeSpecificData": {
"downPayment": 85000,
"financingAllowed": true,
"iptu": 500,
"condominiumFee": 800
}
}
{
"acceptanceCriteria": {
"minIncome": 10500,
"requiresGuarantor": true,
"petAllowed": true,
"smokingAllowed": false,
"maxOccupants": 3
}
}

Exemplo de criação de negociação com todos os tipos de campos:

{
"title": "Lead do Site - João Silva",
"dealType": "rental",
"stage": "lead",
"status": "open",
"currency": "BRL",
"contacts": [
{
"name": "João Silva",
"email": "[email protected]",
"phone": "+5511999999999",
"role": "buyer"
}
],
"marketingChannelInstanceId": "uuid-do-canal-marketing",
"utmSource": "google",
"utmMedium": "cpc",
"utmCampaign": "verao-2024",
"source": "Google Ads",
"campaign": "Campanha Verão 2024",
"custom": {
"maxPrice": 4000,
"minPrice": 2000,
"locations": ["Zona Sul", "Copacabana"],
"propertyTypes": ["apartment"],
"bedrooms": 2,
"bathrooms": 1,
"utm_term": "apartamento copacabana",
"utm_content": "ad-variation-a",
"landingPage": "/imoveis/apartamento-123",
"observacoes": "Cliente interessado em imóveis próximos ao metrô",
"aceita_financiamento": true,
"pet_friendly": true
}
}

TipoOnde UsarCampos Principais
Marketing AttributionNível superiorutmSource, utmMedium, utmCampaign, source, campaign
Search Preferencescustom (deals)maxPrice, minPrice, locations, propertyTypes, bedrooms, bathrooms
Custom FieldscustomQualquer campo personalizado`
Listing SpecifictypeSpecificData, acceptanceCriteriadeposit, iptu, minIncome, etc.

Lembre-se:

  • Marketing attribution vai no nível superior
  • Search preferences vão em custom (apenas deals)
  • Custom fields vão em custom (qualquer entidade)
  • Listings têm campos adicionais específicos