FotoImob.API v1

API do FotoImob

Esta API permite que um CRM leia os imóveis de uma imobiliária no FotoImob — incluindo as fotos já tratadas, na ordem, com a capa primeiro. É a forma recomendada de levar as fotos do FotoImob para o seu sistema.

Para o cliente: a chave de API fica em Integrações dentro do FotoImob (visível para o dono ou administrador da conta). Essa mesma tela tem um botão Testar conexão para conferir se está tudo certo.

Autenticação

Envie a chave da organização no cabeçalho Authorization. Toda chamada exige a chave.

Authorization: Bearer fi_sua_chave_aqui

A chave identifica a organização e dá acesso somente aos imóveis dela. Trate-a como senha: guarde no servidor, nunca no navegador nem em app publicado. O cliente pode gerar uma nova a qualquer momento (o que invalida a anterior).

Endereço base

https://app.fotoimob.com.br/api/v1

Todas as respostas são JSON com Content-Type: application/json.

Listar imóveis

GET /imoveis

ParâmetroTipoDescrição
statustextoediting, ready ou archived. Padrão: todos. Normalmente você quer ready — imóvel com as fotos finalizadas.
atualizado_aposISO 8601Devolve só o que mudou depois dessa data. Use para sincronizar de forma incremental.
limitenúmero1 a 100. Padrão: 50.
paginanúmeroA partir de 1. Padrão: 1.

Exemplo

curl -H "Authorization: Bearer fi_sua_chave_aqui" \
  "https://app.fotoimob.com.br/api/v1/imoveis?status=ready&limite=50"

Resposta

{
  "imoveis": [ { /* objeto imóvel — ver abaixo */ } ],
  "paginacao": {
    "pagina": 1,
    "limite": 50,
    "total": 213,
    "paginas": 5,
    "tem_proxima": true
  }
}

Buscar um imóvel

GET /imoveis/{id}

Aceita o id do FotoImob ou o codigo do anunciante (o código interno da imobiliária).

curl -H "Authorization: Bearer fi_sua_chave_aqui" \
  "https://app.fotoimob.com.br/api/v1/imoveis/PB106"

A resposta é { "imovel": { … } } com o mesmo objeto da listagem.

O objeto imóvel

{
  "id": "iv_1784752668236",
  "codigo": "12456",
  "nome": "Apartamento de Luiz",
  "status": "ready",              // editing | ready | archived
  "situacao": "disponivel",       // disponivel | reservado | vendido | locado
  "tipo": "Apartamento",
  "categoria": "residencial",     // residencial | comercial | rural
  "finalidade": "venda",          // venda | locacao | venda_locacao | temporada

  "anuncio": {
    "titulo": "Apartamento 3 quartos com suíte e varanda",
    "descricao": "Texto completo do anúncio…",
    "pagina_publica": "https://app.fotoimob.com.br/imovel/iv_1784752668236"
  },

  "endereco": {
    "cep": "88056300", "logradouro": "Rua Leonel Pereira", "numero": "715",
    "complemento": "210 A", "bairro": "Cachoeira do Bom Jesus",
    "cidade": "Florianópolis", "uf": "SC",
    "exibicao": "bairro"          // completo | rua | bairro
  },

  "valores": {
    "venda": 950000, "locacao": 4900,
    "condominio": 490, "iptu": 190,
    "sob_consulta": false
  },

  "medidas": {
    "area_total": 79, "area_util": 62, "area_terreno": null,
    "dormitorios": 2, "suites": 1, "banheiros": 2, "vagas": 1,
    "andar": 1, "ano_construcao": 2021,
    "mobiliado": "parcial"        // nao | parcial | sim
  },

  "caracteristicas": ["piscina", "churrasqueira", "elevador"],

  "fotos": [
    {
      "url": "https://res.cloudinary.com/…/foto.jpg",
      "ordem": 1,
      "capa": true,
      "comodo": "sala",           // classificado por IA; null se não identificado
      "area_comum": false         // true = área comum do condomínio
    }
  ],
  "total_fotos": 12,

  "criado_em": "2026-07-22T20:37:49.526Z",
  "atualizado_em": "2026-07-30T17:19:09.165Z"
}
As fotos já vêm tratadas. As URLs são públicas e permanentes — baixe-as ou referencie-as direto. A ordem do array é a ordem definida pelo cliente, e a primeira (capa: true) é a foto de capa. Campos sem valor vêm como null; nunca são omitidos.

Sincronização incremental

Na primeira carga, busque tudo. Depois, guarde o maior atualizado_em que você recebeu e use-o ematualizado_apos na próxima chamada — assim você traz só o que mudou.

# 1ª vez
GET /imoveis?status=ready&limite=100&pagina=1

# nas próximas
GET /imoveis?status=ready&atualizado_apos=2026-07-30T17:19:09.165Z

Uma consulta a cada 15 minutos costuma ser suficiente. Se quiser reagir na hora, use o webhook abaixo.

Webhook (opcional)

O cliente pode cadastrar uma URL em Integrações. Quando um imóvel é marcado como Pronto, enviamos um POST para ela — assim o seu sistema reage na hora, sem ficar consultando.

CabeçalhoConteúdo
X-FotoImob-Eventimovel.pronto
X-FotoImob-Signaturesha256=… — HMAC do corpo
User-AgentFotoImob-Webhook/1

Corpo

{
  "evento": "imovel.pronto",
  "enviado_em": "2026-07-30T18:02:57.244Z",
  "imovel": { /* mesmo objeto da API */ }
}

Conferindo a assinatura

Assinamos o corpo cru (antes de qualquer parse) com HMAC-SHA256, usando o segredo que aparece na tela de Integrações do cliente. Confira sempre antes de confiar no conteúdo:

import crypto from 'crypto'

function assinaturaValida(corpoCru, cabecalho, segredo) {
  const esperado = 'sha256=' + crypto
    .createHmac('sha256', segredo)
    .update(corpoCru)
    .digest('hex')
  // comparação em tempo constante evita vazar informação por timing
  return crypto.timingSafeEqual(Buffer.from(esperado), Buffer.from(cabecalho))
}

Responda 2xx rápido. Se o seu endpoint falhar ou demorar mais de 8 segundos, o envio é descartado — então trate o webhook como um aviso, e mantenha a sincronização por atualizado_apos como rede de segurança.

Erros

{ "error": { "code": "invalid_api_key", "message": "Chave de API inválida." } }
HTTPcodeO que houve
401missing_api_keyFaltou o cabeçalho Authorization.
401invalid_api_keyChave inexistente ou revogada.
400invalid_statusstatus fora dos valores aceitos.
400invalid_dateatualizado_apos não é uma data ISO 8601.
404not_foundImóvel não existe nessa organização.
500query_failedFalha do nosso lado. Tente de novo.

Sobre publicação em portais

O FotoImob também gera um feed XML (padrão VRSync) para ZAP, VivaReal e OLX. Se o seu CRM já publica nesses portais, oriente o cliente a manter o feed do FotoImob desligado — os dois enviando o mesmo imóvel resultaria em anúncio duplicado, o que os portais penalizam. Neste caso o FotoImob trata as fotos e o seu CRM continua sendo quem publica.

Dúvidas

Escreva para contato@fotoimob.com.br com o nome do CRM e o que você precisa. Se o seu sistema não puder consumir esta API, converse com a gente sobre outras formas de integração.