DEVELOPING

Os planos do seu cliente no portal

GET /property-v1/customers/{portal}/account

Ao publicar, você envia um plan. Para escolhê-lo precisa saber quais planos o seu cliente tem e quantas publicações ainda lhe restam livres — e esse dado fica no portal, não no nosso sistema.

Você o tem em dois lugares, e convém usar os dois:

OndeO que lhe dáCusta
GET /property-v1/customersA última coisa que lemos, com a datanada
GET /property-v1/customers/{portal}/accountO que o portal diz agora, e atualiza o anterior1 chamada da cota do seu cliente

O caminho barato é pedir o cliente —que é gratuito— e olhar o campo plansStale. Se disser true, houve uma publicação ou uma baixa depois dessa leitura; é aí que você decide se gasta a chamada.

Como se pede

curl https://property-api.mapaprop.com/property-v1/customers/zonapropapi/account \
  -H "Authorization: Bearer $TOKEN" \
  -H "x-client-ref: cliente-42"

Resposta 200:

{
  "portal": "zonapropapi",
  "portalAccountId": "17064147",
  "plans": [
    { "plan": "DESARROLLOS_HOME", "planTotal": 5,  "planAvailable": 1 },
    { "plan": "HOME",             "planTotal": 80, "planAvailable": 31 },
    { "plan": "SIMPLE",           "planTotal": 80, "planAvailable": 20 }
  ],
  "plansReadAt": "2026-10-07T19:32:22.975Z",
  "plansStale": false,
  "planExpirations": [
    { "plan": "HOME", "date": "2026-12-31T03:00:00.000Z", "quantity": 85 }
  ],
  "cached": true
}
CampoO que é
plans[].planO nome do plano, tal como o portal o chama. É o valor que você envia como plan ao publicar
plans[].planTotalQuantos tem contratados. Pode vir null se o portal não informar
plans[].planAvailableQuantas publicações ainda lhe restam livres
plansReadAtQuando lemos isto do portal
plansStalefalse aqui sempre: acabamos de ler
planExpirationsQuando vencem e quantos. É omitido se o portal não informar nenhum
cachedSe guardamos a cópia. Em false, a leitura gratuita vai continuar lhe dando a anterior

O portal só lista os planos que têm cota. Um plano que o seu cliente contratou mas já esgotou não aparece na lista. Por isso "não está em plans" não significa "não o tem contratado": pode significar as duas coisas, e o portal não as distingue.

É isso que torna confuso o erro de publicação por plano: diz "a empresa tem utilizados todos os seus disponíveis" e se lê como se a conta estivesse sem nada.

Onde se encaixa no fluxo

1. POST /property-v1/customers                   você declara o cliente
2. conecta a conta dele no portal                 ← é aqui que entram os planos, sem custo extra
3. GET  /property-v1/customers                   você os vê, grátis, com a data
4. GET  /property-v1/customers/{portal}/account   você os atualiza contra o portal   (1 chamada)
5. PUT  …/publication/{portal}                   você publica

O passo 2 já guarda os planos: a chamada que verifica que o seu cliente autorizou é a mesma que os traz, então ao conectar você já os tem sem pagar nada.

Depois de cada publicação ou baixa, o passo 3 os devolve com plansStale: true.

Por que não os atualizamos sozinhos

Porque cada leitura sai da cota mensal do seu cliente no portal —que cada portal define à sua maneira; na Zonaprop são 1.500 chamadas— e é a mesma que você usa para publicar e para trazer consultas. Atualizar em cada publicação duplicaria o gasto da sua integração, e a decisão de quando vale a pena é sua.

E há um motivo mais forte: o portal não nos diz qual plano uma publicação consumiu. A resposta dele traz o código do anúncio, o id e os erros — nenhum plano. Se subtraíssemos o que você pediu poderíamos subtrair o errado, então preferimos avisar que a cópia ficou velha em vez de lhe dar um número inventado.

Se você nunca o chamar

Não acontece nada grave: você envia o seu plan ao publicar e, se o seu cliente não o tiver, a resposta do publish lhe diz quais ele tem no bloco planIssue. Este endpoint existe para que você possa consultá-lo quando quiser, não para que tenha que fazê-lo.

Códigos de resposta

CódigoerrorO que aconteceu
200—Os planos, recém-lidos do portal
400portal is requiredFalta o portal na rota
400clientRef is required (header x-client-ref)Falta identificar o cliente
401UnauthorizedToken ausente ou inválido
403Missing scope: property-api-readO seu token não pode ler
403Missing required scope: zonapropapi:connectO seu token não está habilitado para esse portal
409portal_not_connectedO seu cliente não tem uma conexão ativa com esse portal
409connection_incompleteA conexão existe mas está incompleta. Conecte-a novamente
501portal_sin_consulta_de_cuentaAinda não consultamos a conta nesse portal
502portal_no_contestoO portal não respondeu. Tente de novo; não sobrescrevemos a cópia anterior

O 502 não apaga o que já tínhamos. Guardar uma lista vazia porque o portal não respondeu diria que o seu cliente não tem planos, e isso seria falso. A cópia anterior continua disponível no GET do cliente com a data.

Portais

Portal{portal}Estado
Zonapropzonapropapidisponível
Argenprop · Cabaprop · MercadoLibre—501

Um 501 não significa que você errou: significa que esse portal ainda não tem esta consulta do nosso lado.

Relacionado