Documentação do Mercado Livre
Confira todas as informações necessárias sobre as APIs Mercado Livre.
Documentação do
Experiência para imóveis
No Mercado Livre, queremos criar uma nova experiência de aluguel e venda de imóveis 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 agenda em tempo hábil.
Este guia tem como objetivo descrever e exemplificar como o Mercado Livre se conecta com os parceiros que hoje estão dentro do modelo de solicitação de visita, o customer journey e em qual etapa cada um dos atores envolvidos participa.
Objetivos
- Descrever brevemente o customer journey de solicitação de visita.
- Descrever cada um dos webhooks e quais são os domínios de variáveis que aceita.
- Fornecer diretrizes técnicas de como integrar-se com nosso sistema para utilizar as atualizações em tempo real e APIs.
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 pelo parceiro para obter mais informações sobre a intenção de visita. Ao mesmo tempo, também nos permitem fornecer mais informações sobre o estado da intenção de visita gerada pelo comprador.
É importante que o seller tenha configurado em seu sistema todos os endpoints da nossa API e realize as chamadas sempre que desejar alterar o estado de uma agenda. Assim que um comprador agendar uma visita, as informações são enviadas ao seller, que poderá começar a realizar as chamadas para nossa API para alterar o estado.
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 seller em suas propriedades. Essa informação é exibida em cada publicação e dentro do fluxo de visita.
Criar configuração
Para os sellers que possuem APENAS propriedades em VENDA, os valores padrão devem ser os seguintes:
| Atributo | Tipo | Default | Descrição |
|---|---|---|---|
| seller_id | Long | Substituir pelo identificador único | Identificador único de provedor ou seller |
| codebtor_required | Boolean | true | Requisito de aval |
| latest_dependent_worker_payrolls | Integer | 3 | Quantidade de últimas liquidações de salário |
| latest_independent_worker_payrolls | Integer | 6 | Quantidade de boletas de honorários |
| email_notify_schedule | Boolean | true | Notificação de agendas por e-mail ao parceiro |
| salary_multiplier | Double | 3 | Fator multiplicador de renda |
| allow_guest_login | Boolean | false | Permite agendas de usuários não logados |
Chamada:
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 | Default | Descrição |
|---|---|---|---|---|---|---|
| seller_id | Sim | 1 | - | Long | - | Identificador único de provedor ou seller |
| codebtor_required | Não | - | - | Boolean, valores permitidos true ou false | true | Requisito de aval |
| latest_dependent_worker_payrolls | Não | 0 | 12 | Integer | 3 | Quantidade de últimas liquidações de salário |
| latest_independent_worker_payrolls | Não | 0 | 24 | Integer | 6 | Quantidade de boletas de honorários |
| email_notify_schedule | Não | - | - | Boolean, valores permitidos true ou false | true | Notificação de agendas por e-mail ao parceiro |
| salary_multiplier | Não | 1 | 10 | Double | 3 | Fator multiplicador de renda |
| allow_guest_login | Não | - | - | Boolean, valores permitidos true ou false | false | Permite agendas de usuários não logados |
Atualizar configuração
Chamada:
curl --location --request PATCH
'https://api.mercadolibre.com/vis-transactions-hub/configurations/provider/{providerId}' \
--header 'Authorization: Bearer {{ACCESS_TOKEN}}' \
--header 'Content-Type: application/json' \
--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ín | Máx | Tipo |
|---|---|---|---|---|
| codebtor_required | Não | - | - | Boolean, valores permitidos true ou false |
| latest_dependent_worker_payrolls | Não | 0 | 12 | Integer |
| latest_independent_worker_payrolls | Não | 0 | 24 | Integer |
| email_notify_schedule | Não | - | - | Boolean, valores permitidos true ou false |
| salary_multiplier | Não | 1 | 10 | Double |
| allow_guest_login | Não | - | - | Boolean, valores permitidos true ou false |
Obtenção de configuração
Por provider_Id:
Chamada:
curl --location --request GET
'https://api.mercadolibre.com/vis-transactions-hub/configurations/provider/$provider_Id' \
--header 'Authorization: Bearer {{ACCESS_TOKEN}}'
Por seller_Id:
Chamada:
curl --location --request GET
'https://api.mercadolibre.com/vis-transactions-hub/configurations/seller/$seller_Id' \
--header 'Authorization: Bearer {{ACCESS_TOKEN}}'
Resposta
Em ambos os casos, por providerId e sellerId, o JSON retornado será o seguinte:
{
"provider_id": "123456789",
"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 em cada parâmetro para obter uma configuração:
| Variável | Tipo | Descrição |
|---|---|---|
| provider_id | String | Identificador único de provedor ou seller. |
| codebtor_required | Boolean | Requisito de aval. |
| latest_dependent_worker_payrolls | Integer | Quantidade de últimas liquidações de salário. |
| latest_independent_worker_payrolls | Integer | Quantidade de boletas de honorários. |
| email_notify_schedule | Boolean | Notificação de agendas por e-mail ao parceiro. |
| salary_multiplier | Double | Fator multiplicador de renda. |
| allow_guest_login | Boolean | Permite agendas 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 ao modelo com Solicitação de visita e vice-versa. Essa ação dependerá do campo enable_rex enviado. Caso já se tenha tentado marcar ou desmarcar e por algum motivo o processo falhe, é possível executar este endpoint para tentar marcá-lo novamente.
Durante o processo de marcação de itens, é possível obter um código de status 422, indicando que a solicitação foi aceita, mas não pôde ser processada, porque o seller não cumpre as condições para marcar itens.
Os parâmetros para realizar a chamada são os seguintes:
| Campo | Descrição | Exemplo |
|---|---|---|
| seller_id | ID do seller ao qual pertencem os itens. | 12345678 |
| item_ids | Corresponde aos itens que serão marcados. Deve ser um array onde os ids devem estar todos juntos e separados por vírgulas (,) ex: MLC123,MLC321 Nota: os itens que serão marcados devem pertencer ao "seller_id" informado |
|
| enable_rex | Corresponde à ação de converter ou reverter item com Solicitação de Visita. Para converter um item com Solicitação de visita, deve-se definir como true. Para reverter um item com Solicitação de visita, deve-se definir como false. |
Chamada:
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 itens marcados/desmarcados:
[
"MLC123",
"MLC321"
]
APIs
Notificação de leads de agenda
Quando no marketplace do Mercadolibre.cl for acionada uma intenção de visita por parte do cliente (comprador) ou quando uma agenda for atualizada para qualquer outro estado, será enviada uma notificação por meio do tópico público VIS Leads, utilizando o filtro de Visit Request.

Para isso, é necessário acessar o aplicativo que recebe todos os leads e habilitar este filtro. A callback URL definida para receber as notificações receberá o conteúdo da seguinte forma:
{
"_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 realizar o API Call para consultá-lo:
curl -X GET -H 'Authorization: Bearer $ACCESS_TOKEN'
https://api.mercadolibre.com/vis/leads/$LEAD_IDPara mais detalhes, consulte a documentação na seção VIS Leads. Ao consultar o Lead, você poderá obter o ID da agenda associada fornecido pelo campo external_id. Com ele, poderá consultar a agenda e seu estado na seção Obtenção de detalhe de agenda.
Para os integradores que possuem "notification_url" definida em sua configuração e habilitaram o filtro "Visit Request" no tópico "VIS Leads", estarão recebendo a notificação de agenda tanto por nossos sistemas quanto em sua callback URL de notificações, ou seja, de forma duplicada.
Se desejar receber notificações apenas do tópico "VIS Leads", deve 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 a configuração, acesse a seção Atualizar configuração
Visita
Gerar Agenda
Para realizar uma agenda pelo portal do Mercado Livre, deve-se fazê-la por URL:
https://www.mercadolibre.cl/agendar/visita-inmuebles/{itemId}
É importante destacar que esta URL deve ser utilizada 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, portanto não se devem utilizar dados produtivos.
O parâmetro para especificar a publicação sobre a qual criar a agenda é:
{itemId}
O qual representa o ID da publicação, exemplo: MLC916101223.
Obtenção de detalhe de agenda
Chamada:
curl --location --request GET
'https://api.mercadolibre.com/vis-transactions-hub/{providerId}/entities/schedules/$schedule_Id' \
--header 'Authorization: Bearer {{ACCESS_TOKEN}}'
O parâmetro para realizar a chamada é:
$schedule_Id
O qual representa o ID da agenda a consultar. 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"}]
}
Seus 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 | List (String) |
Atualização status agenda
Chamada:
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 realizada | {} |
| 6 | scheduling_confirmed | Horário confirmado | { scheduling_date: "date", 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 da visita. O objetivo de utilizar este estado é evitar o processo de expiração de agendas, conforme explicado na seção Agenda expirada. Este estado é utilizado quando um seller usa algum canal de contato como Whatsapp ou Call para contatar o buyer. Desde o Mercado Livre o processo está automatizado para detectar intenções de contato a partir do Painel de Pessoas interessadas, Emails e Whatsapp ao buyer.
Scheduling_canceled
O domínio da variável do Status_code: 2 (scheduling_canceled) é o seguinte:
| Code | Reason | Descrição | Usado por | Usado por tipo de propriedade |
|---|---|---|---|---|
| 2 | buyer_out_of_reach | Não é possível se comunicar com o buyer. | Integradores, Painel. | Aluguel/Venda |
| 6 | requirements_not_met | buyer não cumpre requisitos. | Integradores, Painel. | Aluguel |
| 14 | buyer_searching_for_later | buyer procura para mais tarde. | Integradores, Painel. | Aluguel |
| 15** | property_not_available | Propriedade não está disponível. | De forma interna. | 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. | De forma interna. | N/A |
| 19** | property_not_available_from_pack_finished | Propriedade não disponível por pacote de publicações finalizado. | De forma interna. | N/A |
| 20** | property_not_available_from_seller_finished | Propriedade não disponível porque o seller a finalizou. | De forma interna. | N/A |
| 21** | property_not_available_from_partner_finished | Propriedade não disponível porque o integrador a finalizou. | De forma interna. | N/A |
| 24** | property_not_available_from_seller_penalty | Propriedade não disponível por penalização ao seller. | De forma interna. | N/A |
| 25*** | property_not_available_seller | Cancelado por propriedade não disponível. | Integradores, Painel. | Aluguel/Venda |
(**) Estas razões são utilizadas para sinalizar aquelas agendas que foram canceladas pelos seguintes motivos:
- Automática para as agendas canceladas por ciclo de vida do item (18).
- Automática por finalização do pacote de destaque (19).
- Mecanismo de controle de disponibilidade executado pelo MercadoLibre ou após finalizar uma publicação. (24).
- Seller que finaliza manualmente seu item e este possui agendas associadas. (15, 20, 21).
Cabe destacar que estas razões são apenas de uso interno, portanto não deveriam ser usadas diretamente nas requests.
Como estas são razões de forma automática e interna, o estado do 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 está disponível | buyer | N/A |
| 101* | buyer_out_of_reach | Não contactaram o buyer | buyer | N/A |
| 102 | buyer_cancel_visit | Cancelaram a visita | buyer | N/A |
| 103 | requirements_not_met | Buyer não cumpre requisitos | buyer | N/A |
| 104 | buyer_searching_for_later | Procura para outra data | buyer | N/A |
| 105 | other_reason | Outro motivo | buyer | N/A |
Visit_success
Como indicado anteriormente, quando uma agenda não é gerenciada, o buyer é consultado se pôde ou não visitar a propriedade, caso indique que sim pôde visitar a propriedade, a agenda passará a Visita Realizada, junto com isso, indicamos a seguinte razão de por que uma agenda pode ser concluída pelo buyer:
| Razão | Descrição | Usado por | Usado por Tipo de propriedade |
|---|---|---|---|
| buyer_completed_whatsapp | Visita realizada através do WhatsApp | Buyer | N/A |
| buyer_completed_email | Visita realizada através de correio | Buyer | N/A |
Agenda expirada (processo automático interno)
O sistema conta com um processo automático que se encarrega de expirar todas as agendas que não foram gerenciadas e se encontram no estado de "agendas criadas", esta ação é executada após 3 dias consecutivos desde a data de intenção do buyer de visitar a propriedade.
Exemplo: o buyer 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 nas primeiras horas, se a agenda ainda não foi gerenciada, esta procederá a expirar. As agendas criadas que são expiradas ficam com a seguinte condição:
| Code | Reason | Descrição | 1 | seller_no_response | Expirou a agenda por não resposta do seller após 3 dias consecutivos desde a data de intenção do buyer de visitar a propriedade. |
|---|
Como esta é uma razão de forma automática e interna, o estado 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. Com o objetivo de que não sejam exibidas unidades na publicação que não estão disponíveis e, portanto, não sejam gerados novos agendamentos, e que, caso estejam novamente disponíveis, possam 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 por meio do campo units no body.
Chamada:
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"
}
]
}
}'
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 seguir são detalhados os valores de status_code e status_name.
| Status_code | Status_name | 1 | update_units |
|---|
A seguir é detalhado o domínio do atributo operation:
| Operation | Descrição | price_updated | Permite atualizar o preço da unidade. |
|---|---|
| unit_added | Permite aumentar a unidade. |
| unit_removed | Permite diminuir a unidade. |