Documentação do Mercado Livre
Confira todas as informações necessárias sobre as APIs Mercado Livre.![circulos azuis em degrade](https://http2.mlstatic.com/storage/developers-site-cms-admin/DevImgs/230801158836-ImgMS--1-.png)
Documentação do
Experiência para imóveis
No Mercado Livre, queremos criar uma nova experiência de aluguel e venda de propriedades para o comprador por meio de publicações que ofereçam uma experiência superior, com foco em garantir a disponibilidade dos imóveis e assegurar a resposta a dúvidas e solicitações de agendamento de forma rápida e eficiente.
Este guia tem como objetivo descrever e exemplificar como o Mercado Livre se conecta com os parceiros que atualmente fazem parte do modelo de solicitação de visita, explicando a jornada do cliente e em que etapa cada um dos atores envolvidos participa desse processo.
Objetivos
- Descrever brevemente a jornada do cliente na solicitação de visita.
- Descrever cada um dos webhooks e quais são os domínios de variável que aceita.
- Fornecer diretrizes técnicas sobre como integrar-se ao nosso sistema para utilizar as atualizações em tempo real e APIs.
Considerações
Atualmente, temos dois ambientes disponíveis para integração:
- Ambiente de produção: este é o ambiente utilizado para acessar a versão em produção do nosso sistema.
- Ambiente de stage: este é o nosso ambiente de pré-produção, reservado para testes e desenvolvimento. Para acessá-lo, é necessário adicionar o parâmetro ?scope=stage à URL principal. Por exemplo: URL/?scope=stage.
Por favor, utilize este ambiente para testes e desenvolvimento antes de implementar qualquer mudança no ambiente de produção.
Passos para iniciar a integração
- A conta do vendedor profissional deve estar registrada.
- Registrar a aplicação para a obtenção do token.
- Autenticação como vendedor ou integrador, conforme aplicável.
- Publicar itens na plataforma.
- Marcar itens como solicitação de visita.
- Obter detalhes da agenda para verificar o fluxo.
Atualizações em Tempo Real
Essas atualizações em tempo real são utilizadas pelos parceiros para obter mais informações sobre a intenção de visita. Ao mesmo tempo, também nos permitem fornecer mais detalhes sobre o status da intenção de visita gerada pelo comprador.
É importante que o vendedor tenha configurado em seu sistema todos os endpoints da nossa API e realize as chamadas sempre que desejar alterar o status de uma agenda. Assim que um comprador agenda uma visita, a informação é enviada ao vendedor, que poderá então iniciar as chamadas à nossa API para atualizar o status.
Configurações
As configurações são necessárias para operar nos fluxos de visita e, adicionalmente, informar sobre as condições de aluguel de cada vendedor em relação às suas propriedades. Essas informações são exibidas em cada publicação e dentro do fluxo de visita.
Criar configuração
Para aqueles vendedores que possuem apenas propriedades à VENDA, os valores padrão devem ser os seguintes:
Atributo | Tipo | Padrão | Descrição |
---|---|---|---|
seller_id | Long | Substituir pelo identificador único | Identificador único do fornecedor ou vendedor |
codebtor_required | Booleano | true | Requisito de fiador |
latest_dependent_worker_payrolls | Inteiro | 3 | Quantidade de últimos contracheques |
latest_independent_worker_payrolls | Inteiro | 6 | Quantidade de recibos de pagamento de autônomos |
email_notify_schedule | Booleano | true | Notificação de agendas por e-mail ao parceiro |
salary_multiplier | Double | 3 | Fator multiplicador de renda |
allow_guest_login | Booleano | false | Permite agendamentos de usuários não logados |
Ambiente de teste (stage):
curl --location --request POST 'https://api.mercadolibre.com/vis-transactions-hub/configurations/provider?scope=stage' \
--header 'Authorization: Bearer {{ACCESS_TOKEN}}' \
--header 'Content-Type: application/json' \
--data-raw '{
"seller_id": 123456789,
"codebtor_required": false,
"latest_dependent_worker_payrolls": 6,
"latest_independent_worker_payrolls": 10,
"email_notify_schedule": true,
"salary_multiplier": 4,
"allow_guest_login": true
}'
Ambiente de produção:
curl --location --request POST 'https://api.mercadolibre.com/vis-transactions-hub/configurations/provider' \
--header 'Authorization: Bearer {{ACCESS_TOKEN}}' \
--header 'Content-Type: application/json' \
--data-raw '{
"seller_id": 123456789,
"codebtor_required": false,
"latest_dependent_worker_payrolls": 6,
"latest_independent_worker_payrolls": 10,
"email_notify_schedule": true,
"salary_multiplier": 4,
"allow_guest_login": true
}'
A seguir, são detalhadas as validações aplicadas em cada atributo.
Atributo | Obrigatório | Mín | Máx | Tipo | Padrão | Descrição |
---|---|---|---|---|---|---|
seller_id | Sim | 1 | - | Long | - | Identificador único do fornecedor ou seller |
codebtor_required | Não | - | - | Boolean, valores permitidos true ou false | true | Requisito de aval |
Atualizar configuração
Ambiente de stage:
curl --location --request PATCH 'https://api.mercadolibre.com/vis-transactions-hub/configurations/provider/{providerId}?scope=stage' \n--header 'Authorization: Bearer {{ACCESS_TOKEN}}' \n--header 'Content-Type: application/json' \n--data-raw '{
"codebtor_required": false,
"latest_dependent_worker_payrolls": 6,
"latest_independent_worker_payrolls": 10,
"email_notify_schedule": true,
"salary_multiplier": 4,
"allow_guest_login": true
}'
Ambiente de produção:
curl --location --request PATCH 'https://api.mercadolibre.com/vis-transactions-hub/configurations/provider/{providerId}' \n--header 'Authorization: Bearer {{ACCESS_TOKEN}}' \n--header 'Content-Type: application/json' \n--data-raw '{
"codebtor_required": false,
"latest_dependent_worker_payrolls": 6,
"latest_independent_worker_payrolls": 10,
"email_notify_schedule": true,
"salary_multiplier": 3,
"allow_guest_login": true
}'
A seguir, são detalhadas as validações aplicadas em cada atributo:
Atributo | Obrigatório | Mínimo | Máximo | Tipo |
---|---|---|---|---|
codebtor_required | Não | - | - | Booleano, valores permitidos: true ou false |
latest_dependent_worker_payrolls | Não | 0 | 12 | Inteiro |
latest_independent_worker_payrolls | Não | 0 | 24 | Inteiro |
email_notify_schedule | Não | - | - | Booleano, valores permitidos: true ou false |
salary_multiplier | Não | 1 | 10 | Decimal |
allow_guest_login | Não | - | - | Booleano, valores permitidos: true ou false |
Obtenção da Configuração
Por providerId:
curl --location --request GET
'https://api.mercadolibre.com/vis-transactions-hub/configurations/provider/{providerId}?scope=stage' \
--header 'Authorization: Bearer {{ACCESS_TOKEN}}' \
Nota: é importante fazer a requisição com o ID do seller de teste e adicionar o queryParam scope=stage
.
Ambiente de Produção:
curl --location --request GET
'https://api.mercadolibre.com/vis-transactions-hub/configurations/provider/{providerId}' \
--header 'Authorization: Bearer {{ACCESS_TOKEN}}' \
Por sellerId:
curl --location --request GET
'https://api.mercadolibre.com/vis-transactions-hub/configurations/seller/{sellerId}?scope=stage' \
--header 'Authorization: Bearer {{ACCESS_TOKEN}}' \
Nota: é importante fazer a requisição com o ID do seller de teste e adicionar o queryParam scope=stage
.
Ambiente de Produção:
curl --location --request GET
'https://api.mercadolibre.com/vis-transactions-hub/configurations/seller/{sellerId}' \
--header 'Authorization: Bearer {{ACCESS_TOKEN}}' \
Resposta
Em ambos os casos, seja via providerId
ou sellerId
, o JSON retornado será o seguinte:
{
"provider_id": "123456789",
"fantasy_name": "Test Company",
"codebtor_required": false,
"latest_dependent_worker_payrolls": 6,
"latest_independent_worker_payrolls": 12,
"email_notify_schedule": true,
"salary_multiplier": 3,
"allow_guest_login": true
}
Descrição dos atributos
A seguir, são detalhadas as validações de cada parâmetro para obter uma configuração:
Variável | Tipo | Descrição | provider_id | String | Identificador único do fornecedor ou vendedor. |
---|---|---|
fantasy_name | String | Nome fantasia associado ao usuário. |
codebtor_required | Booleano | Requisito de fiador. |
latest_dependent_worker_payrolls | Inteiro | Quantidade de últimas folhas de pagamento de dependentes. |
latest_independent_worker_payrolls | Inteiro | Quantidade de recibos de honorários. |
email_notify_schedule | Booleano | Notificação de agendamentos por e-mail para o parceiro. |
salary_multiplier | Double | Fator multiplicador de salário. |
allow_guest_login | Booleano | Permite agendamentos de usuários não logados. |
Marcação e Desmarcação de Itens
Marcar e desmarcar itens
Este endpoint é utilizado para marcar itens que não estão com Solicitação de Visita, para que sejam convertidos para o modelo com Solicitação de Visita, e vice-versa. Essa ação dependerá do campo enable_rex enviado.
Se já foi tentado marcar ou desmarcar e, por algum motivo, o processo falhou, pode-se executar este endpoint para tentar marcá-lo novamente.
Nos ambientes de stage e produção, os parâmetros para fazer a chamada são os seguintes:
Campo | Descrição | Exemplo | seller_id | ID do vendedor ao qual pertencem os itens. | 12345678 |
---|---|---|
item_ids | Corresponde aos itens que vão ser marcados. |
Deve ser um array onde os ids devem estar todos juntos e separados por vírgulas (,).
ex: MLC123,MLC321
Nota: os itens que forem marcar, devem pertencer ao “seller_id” que foi informado. |
enable_rex | Corresponde à ação de converter ou reverter o item com Solicitação de Visita. | Para converter um item com Solicitação de Visita, deve-se colocar true. Para reverter um item com Solicitação de Visita, deve-se colocar false. |
Nota: é importante fazer a chamada com o id de vendedor de teste e adicionar como queryParam scope=stage.
Ambiente de stage:
curl --location --request POST
'https://api.mercadolibre.com/vis-transactions-hub/{providerId}/entities/items/tags?scope=stage' \
--header 'Authorization: Bearer {{ACCESS_TOKEN}}' \
--header 'Content-Type: application/json' \
--data-raw '{
"seller_id": 123123123,
"item_ids": ["MLC123","MLC321"],
"enable_rex": true
}'
Ambiente de produção:
curl --location --request POST
'https://api.mercadolibre.com/vis-transactions-hub/{providerId}/entities/items/tags' \
--header 'Authorization: Bearer {{ACCESS_TOKEN}}' \
--header 'Content-Type: application/json' \
--data-raw '{
"seller_id": 123123123,
"item_ids": ["MLC123","MLC321"],
"enable_rex": true
}'
E o JSON retornado será a lista de ítems marcados/desmarcados:
[
"MLC123",
"MLC321"
]
APIs
Notificação de leads de agenda
Quando, a partir do marketplace do Mercadolibre.cl, for acionada uma intenção de visita por parte do cliente (buyer) ou quando uma agenda for atualizada para qualquer outro estado, uma notificação será enviada através do tópico público VIS Leads, utilizando o filtro Visit Request.
![](https://http2.mlstatic.com/storage/developers-site-cms-admin/168778163655-Captura-de-Tela-2025-01-31-a-s-10.10.04.png)
Para isso, é necessário acessar o aplicativo que recebe todos os leads e habilitar esse filtro.
O callback URL definido para receber as notificações receberá o conteúdo no seguinte formato:
{
"_id": "abcd-qwer-1234",
"topic": "vis_leads",
"resource": "/vis/leads/{lead_id}",
"user_id": 123456789,
"application_id": 123456789123456789,
"sent": "2025-01-27T18:21:06.159Z",
"attempts": 1,
"received": "2025-01-27T18:21:06.057Z",
"actions": [
"visit_request"
]
}
O campo lead_id corresponde ao identificador do Lead de agenda. Em seguida, deve-se fazer a chamada à API para consultá-lo:
curl -X GET -H 'Authorization: Bearer $ACCESS_TOKEN' https://api.mercadolibre.com/vis/leads/$LEAD_ID?seller_id=$SELLER_ID
Para mais detalhes, consulte a documentação na seção VIS Leads
Por fim, ao consultar o Lead, será possível obter o ID da agenda associada através do campo external_id. Com ele, será possível consultar a agenda e seu estado na seção Obtenção de detalhes da agenda
Para os integradores que possuem o campo “notification_url” definido em sua configuração e ativaram o filtro “Visit Request” no tópico “VIS Leads”, a notificação de agenda será recebida tanto por nossos sistemas quanto na URL de callback de notificações, ou seja, de forma duplicada.
Se desejar receber notificações apenas pelo tópico “VIS Leads”, é necessário atualizar o campo “notification_url” e deixá-lo vazio.
{
"notification_url": ""
}
Dessa forma, as agendas deixarão de ser notificadas pelo nosso sistema interno. Para mais detalhes sobre como alterar essa configuração, acesse a seção Atualizar configuração
Visita
Gerar Agenda
Para simular uma agenda a partir do portal do Mercado Livre no ambiente de Stage, utilize a seguinte URL:
Ambiente de Stage:
https://www.mercadolibre.cl/agendar/visita-inmuebles/{itemId}?scope=stage
É importante destacar que essa URL deve ser usada diretamente no navegador, substituindo o parâmetro {itemId} pelo correspondente à publicação. Além disso, tanto o usuário quanto a publicação devem ser de teste, ou seja, não devem ser utilizados dados produtivos.
O parâmetro para especificar a publicação sobre a qual a agenda será criada é:
{itemId}
Esse parâmetro representa o ID da publicação. Exemplo: MLC916101223.
Obtenção de detalhes da agenda
Ambiente de Stage:
curl --location --request GET
'https://api.mercadolibre.com/vis-transactions-hub/{providerId}/entities/schedules/{scheduleId}?scope=stage' \
--header 'Authorization: Bearer {{ACCESS_TOKEN}}'
Nota: É importante realizar a requisição com o ID de vendedor de teste e adicionar o parâmetro de query scope=stage.
Ambiente de Produção:
curl --location --request GET
'https://api.mercadolibre.com/vis-transactions-hub/{providerId}/entities/schedules/{scheduleId}' \
--header 'Authorization: Bearer {{ACCESS_TOKEN}}'
Em ambos os casos, o parâmetro para realizar a chamada é:
{scheduleId}
Esse parâmetro representa o ID da agenda a ser consultada.
O JSON retornado será o seguinte:
{
"id": 27002,
"unit_name": "1808-B",
"user_id": 1006753330,
"email": "useremail@email.cl",
"name": "Test Test",
"last_name": "",
"item_id": "MLC916101223",
"phone": "1111-1111",
"scheduling_date": ["2022-03-30"],
"scheduling_time_period": [{"from": "09:00:00","to": "12:00:00"}],
}
Os respectivos tipos de dados são:
Variável | Tipo |
---|---|
id | Long |
unit_name | String |
user_id | Long |
String | |
name | String |
last_name | String |
item_id | String |
phone1 | String |
phone2 | String |
scheduling_time | Lista (String) |
scheduling_time_period | Lista (String) |
Atualização de status da agenda
Ambiente de stage:
curl --location --request PUT
'https://api.mercadolibre.com/vis-transactions-hub/{providerId}/entities/schedules?scope=stage' \
--header 'Authorization: Bearer {{ACCESS_TOKEN}}'
--header 'Content-Type: application/json' \
--data-raw '{
"scheduling_id": 12345,
"status_code": 12345,
"status_name": "string",
"message": "string",
"timestamp": "ISO 8601",
"data": {}
}'
Ambiente de produção:
curl --location --request PUT
'https://api.mercadolibre.com/vis-transactions-hub/{providerId}/entities/schedules' \
--header 'Authorization: Bearer {{ACCESS_TOKEN}}'
--header 'Content-Type: application/json' \
--data-raw '{
"scheduling_id": 12345,
"status_code": 12345,
"status_name": "string",
"message": "string",
"timestamp": "ISO 8601",
"data": {}
}'
A seguir, detalhamos o domínio da variável data:
Status_code | Status_name | Descrição | Body |
---|---|---|---|
2 | scheduling_canceled | Agenda cancelada | { code: "string", reason: "string" } |
3 | scheduling_modified | Horário modificado | |
4 | visit_success | Visita bem-sucedida | {} |
6 | scheduling_confirmed | Horário confirmado | { scheduling_date: "data", scheduling_time: "string" } |
7* | scheduling_contacting | Gerenciando visita | {} |
(*) O estado scheduling_contacting serve para indicar que o seller já está se comunicando com o buyer para coordenar uma data e hora para a visita. O objetivo de utilizar este estado é evitar o processo de expiração das agendas, conforme explicado na seção Agenda expirada. Este estado é utilizado quando um seller usa algum canal de contato como Whatsapp, Call para contatar o buyer. O processo é automatizado pela Mercado Livre para detectar intenções de contato a partir do Painel de Pessoas Interessadas, Emails e Whatsapp com o buyer.
scheduling_canceled
O domínio da variável do Status_code: 2 (scheduling_canceled) é o seguinte:
Code | Reason | Descrição | Usada por | Usada por tipo de propriedade |
---|---|---|---|---|
2 | buyer_out_of_reach | Não é possível comunicar com o buyer. | Integradores, Painel. | Aluguel/Venda |
6 | requirements_not_met | Buyer não cumpre os requisitos. | Integradores, Painel. | Aluguel |
14 | buyer_searching_for_later | Buyer procura para mais tarde. | Integradores, Painel. | Aluguel |
15** | property_not_available | Propriedade não disponível. | Internamente. | N/A |
16 | buyer_cancel_visit | Cancelada pelo buyer. | Integradores, Painel. | Aluguel/Venda |
18** | property_not_available_from_life_cycle | Propriedade não disponível por ciclo de vida. | Internamente. | N/A |
19** | property_not_available_from_pack_finished | Propriedade não disponível por pacote de publicações finalizado. | Internamente. | N/A |
20** | property_not_available_from_seller_finished | Propriedade não disponível porque o seller a finalizou. | Internamente. | N/A |
21** | property_not_available_from_partner_finished | Propriedade não disponível porque o integrador a finalizou. | Internamente. | N/A |
24** | property_not_available_from_seller_penalty | Propriedade não disponível por penalização ao seller. | Internamente. | N/A |
25*** | property_not_available_seller | Cancelada pelo seller. | Integradores, Painel. | Aluguel/Venda |
(**) Estas razões são usadas para indicar as agendas que foram canceladas pelos seguintes motivos:
- Automática para as agendas canceladas pelo ciclo de vida do item (18).
- Automática pela finalização do pacote de destaque (19).
- Mecanismo de controle de disponibilidade executado pelo Mercado Livre ou após a finalização de uma publicação (24).
- Seller que finaliza manualmente seu item e este possui agendas associadas (15, 20, 21).
Vale ressaltar que essas razões são de uso interno apenas, portanto não devem ser usadas diretamente nas requisições.
Como essas razões são automáticas e internas, o status de cancelamento será notificado conforme indicado na seção notificação de estados de agenda.
Razões do comprador
Esses códigos e razões correspondem à resposta fornecida pelo comprador. Não devem ser usados pelo integrador/vendedor.
Código | Razão | Descrição | Usado por | Usado por Tipo de propriedade |
---|---|---|---|---|
100*** | property_not_available_buyer | Propriedade não disponível | comprador | N/A |
101* | buyer_out_of_reach | Não conseguiram contactar o comprador | comprador | N/A |
102 | buyer_cancel_visit | Visita cancelada | comprador | N/A |
103 | requirements_not_met | Comprador não atende aos requisitos | comprador | N/A |
104 | buyer_searching_for_later | Busca para outra data | comprador | N/A |
105 | other_reason | Outro motivo | comprador | N/A |
Visita realizada
Como indicado anteriormente, quando uma agenda não é gerida, pergunta-se ao comprador se ele conseguiu ou não visitar a propriedade. Caso ele informe que conseguiu visitar a propriedade, a agenda passará para Visita Realizada, e junto com isso, indicamos a seguinte razão de por que uma agenda pode ser completada pelo comprador:
Razão | Descrição | Usado por | Usado por Tipo de propriedade |
---|---|---|---|
buyer_completed_whatsapp | Visita realizada através do WhatsApp | Comprador | N/A |
buyer_completed_email | Visita realizada através de e-mail | Comprador | N/A |
Agenda expirada (processo automático interno)
O sistema possui um processo automático que se encarrega de expirar todas as agendas que não foram geridas e estão no estado de "agendas criadas". Essa ação é executada após 3 dias consecutivos desde a data de intenção do comprador de visitar a propriedade.
Exemplo: o comprador gera uma solicitação de visita com a intenção de visitar a propriedade no dia 1 de novembro. Após 3 dias consecutivos (4 de novembro), no 4º dia pela manhã, se a agenda continuar sem ser gerida, ela será expirada.
As agendas criadas que são expiradas ficam com a seguinte condição:
Código | Razão | Descrição | 1 | seller_no_response | A agenda expirou devido à falta de resposta do vendedor após 3 dias consecutivos desde a data de intenção do comprador de visitar a propriedade. |
---|
Como essa é uma razão automática e interna, o status da expiração será notificado conforme indicado na seção Notificação de leads de Agenda..
Unidades MultiFamily
Edição de preço, aumento ou diminuição de unidades
Este endpoint é utilizado para atualizar o preço das unidades, bem como aumentar ou diminuir o estoque das mesmas. O objetivo é que não sejam exibidas unidades na publicação que não estão disponíveis e, portanto, não gerem novos agendamentos. Caso fiquem disponíveis novamente, poderão ser exibidas. Adicionalmente, oferece a opção de atualizar o preço das unidades.
O endpoint suporta a atualização de uma lista de unidades através do campo units no corpo da requisição.
Ambiente de stage:
curl --location --request PUT
'https://api.mercadolibre.com/vis-transactions-hub/{providerId}/entities/items?scope=stage' \
--header 'Authorization: Bearer {{ACCESS_TOKEN}}'
--header 'Content-Type: application/json' \
--data-raw '{
"item_id": ML123,
"status_code": 1,
"status_name": "string",
"message": "string",
"timestamp": "ISO 8601",
"data": {
"units": [
{
"unit_name": "string",
"price": 200000,
"operation": "string"
},
{
"unit_name": "string",
"price": 400000,
"operation": "string"
}
]
}
}'
Nota: É importante fazer a chamada com o id do seller de teste e inserir como queryParam scope=stage.
Ambiente de produção:
curl --location --request PUT
'https://api.mercadolibre.com/vis-transactions-hub/{providerId}/entities/items' \
--header 'Authorization: Bearer {{ACCESS_TOKEN}}'
--header 'Content-Type: application/json' \
--data-raw '{
"item_id": ML123,
"status_code": 1,
"status_name": "string",
"message": "string",
"timestamp": "ISO 8601",
"data": {
"units": [
{
"unit_name": "string",
"price": 200000,
"operation": "string"
},
{
"unit_name": "string",
"price": 400000,
"operation": "string"
}
]
}
}'
Em ambos casos o body é o seguinte:
{
item_id: "int",
status_code: "int",
status_name: "string",
message: "string",
timestamp: "ISO 8601", // ej: 2011-10-05T14:48:00.000Z
data: {
units: [
{
unit_name: "string",
price: "int",
operation:"string"
}
]
}
}
A continuação se detalha os valores de status_code e status_name.
Status_code | Status_name | 1 | update_units |
---|
A continuação se detalha o dominio do atributo operation:
Operation | Descripción | price_updated | Permite atualizar o preço da unidade. |
---|---|
unit_added | Permite aumentar a unidade. |
unit_removed | Permite diminuir a unidade. |