Documentación Mercado Libre
Descubre toda la información que debes conocer sobre las APIs de Mercado Libre.Documentación
Experiencia para inmuebles
Desde Mercado Libre queremos generar una nueva experiencia de arriendo y venta de propiedades para el buyer a través de publicaciones que ofrezcan una experiencia superior con foco en asegurar la disponibilidad de los inmuebles, y garantizar la respuesta a dudas y solicitudes de agenda en tiempo y forma.
Esta guía tiene como objetivo describir y ejemplificar cómo Mercado Libre se conecta con los partners que hoy están dentro del modelo de solicitud de visita, el customer journey y en qué etapa participa cada uno de los actores involucrados dentro del mismo.
Objetivos
- Describir brevemente el customer journey de solicitud de visita.
- Describir cada uno de los webhooks y cuales son los dominios de variable que acepta.
- Entregar lineamientos técnicos de cómo integrarse con nuestro sistema para poder hacer uso de la actualizacion en tiempo real y APIs.
- Ambiente de producción: este es el ambiente utilizado para acceder a la versión en producción de nuestro sistema
- Ambiente de stage: este es nuestro ambiente de preproducción, reservado para pruebas y desarrollo. Para acceder a él, es necesario agregar el parámetro ?scope=stage a la URL principal. Por ejemplo: URL/?scope=stage.
- La cuenta del seller profesional debe estar registrada.
- Registrar la aplicación para la obtención del token.
- Autenticación como seller o integrador según corresponda.
- Generar configuración del seller.
- Publicar ítems en la plataforma.
- Marcar ítems como solicitud de visita.
- Obtener detalles de la agenda para verificar el flujo.
Consideraciones
Actualmente, tenemos dos ambientes disponibles para integración:
Por favor, utilice este ambiente para pruebas y desarrollo antes de implementar cualquier cambio en el ambiente de producción.
Pasos para iniciar la integración
Actualizaciones en Tiempo Real
Estas actualizaciones en tiempo real son utilizadas por el partner para obtener más información sobre la intención de visita. Al mismo tiempo, también nos permiten proporcionar más información sobre el estado de la intención de visita generada por el buyer.
Es importante que el seller haya configurado en su sistema todos los endpoints de nuestra API y realice las llamadas siempre que desee cambiar el estado de una agenda. Tan pronto como un buyer programe una visita, la información se envía al seller, quien podrá comenzar a realizar las llamadas a nuestra API para cambiar el estado.
Configuraciones
Las configuraciones son necesarias para operar en los flujos de visita y adicionalmente informar acerca de las condiciones de arriendo de cada seller sobre sus propiedades, esta información se visualiza en cada publicación y dentro del flujo de visita.
Crear configuración
A continuación se detallan las validaciones aplicadas en cada parámetro para una nueva configuración:
Parámetro | Requerido | Min | Max | Tipo | Por defecto | Descripción | seller_id | Sí | 1 | - | Long | - | Identificador único de proveedor o seller. |
---|---|---|---|---|---|---|
notification_url | No | 0 | 150 | String | “” | URL para recibir notificaciones de agendas. |
codebtor_required | No | - | - | Boolean, valores permitidos true o false. | true | Requisito de aval. |
latest_dependent_worker_payrolls | No | 0 | 12 | Integer | 3 | Cantidad de últimas liquidaciones de sueldo. |
latest_independent_worker_payrolls | No | 0 | 24 | Integer | 6 | Cantidad de boletas de honorarios. |
email_notify_schedule | No | - | - | Boolean, valores permitidos true o false. | true | Notificación de agendas por correo al partner. |
salary_multiplier | No | 1 | 10 | Double | 3 | Factor multiplicador de renta. |
notification_header_token | No | 1 | 50 | String | “” | Token de autenticación para recibir notificaciones de agendas. |
notification_token | No | 1 | 300 | String | “” | Header asociado al token para recibir notificaciones de agendas. |
allow_guest_login | No | - | - | Boolean | false | Permite agendas de usuarios no logueados. |
Para el caso de los campos notification_header_token y notification_token solo deben ser completados cuando se tiene configurada una url de notificación y su valor será encriptado automáticamente al crear dicha configuración.
Ambiente de 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,
"notification_url": "https://notification-url.com",
"codebtor_required": false,
"latest_dependent_worker_payrolls": 6,
"latest_independent_worker_payrolls": 10,
"email_notify_schedule": true,
"salary_multiplier": 4,
"notification_header_token": "Authorization",
"notification_token": "Bearer ANB7xKhiUZmwltVd3f1odcHHM9VAwg02kwmLwtZwHv3S",
"allow_guest_login": true
}'
Ambiente de producción:
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,
"notification_url": "https://notification-url.com",
"codebtor_required": false,
"latest_dependent_worker_payrolls": 6,
"latest_independent_worker_payrolls": 10,
"email_notify_schedule": true,
"salary_multiplier": 4,
"notification_header_token": "Authorization",
"notification_token": "Bearer ANB7xKhiUZmwltVd3f1odcHHM9VAwg02kwmLwtZwHv3S",
"allow_guest_login": true
}'
Actualizar configuración
A continuación se detallan las validaciones aplicadas en cada atributo.
Nota: dado que es una actualización parcial, todos los campos son opcionales y sólo se deben enviar los que se quieran actualizar.
Parámetro | Requerido | Min | Max | Tipo | notification_url | No | 1 | 150 | String |
---|---|---|---|---|
codebtor_required | No | - | - | Boolean, valores permitidos true o false. |
latest_dependent_worker_payrolls | No | 0 | 12 | Integer |
latest_independent_worker_payrolls | No | 0 | 24 | Integer |
email_notify_schedule | No | - | - | Boolean, valores permitidos true o false. |
salary_multiplier | No | 1 | 10 | Double |
allow_guest_login | No | - | - | Boolean, valores permitidos true o false. |
notification_header_token | No | 1 | 50 | String |
notification_token | No | 1 | 300 | String |
Ambiente de stage:
curl --location --request PATCH
'https://api.mercadolibre.com/vis-transactions-hub/configurations/provider/{providerId}?scope=stage' \
--header 'Authorization: Bearer {{ACCESS_TOKEN}}' \
--header 'Content-Type: application/json' \
--data-raw ''{
"notification_url": “https://notification-url.com”,
"codebtor_required": false,
"latest_dependent_worker_payrolls": 6,
"latest_independent_worker_payrolls": 10,
"email_notify_schedule": true,
"salary_multiplier": 4,
"notification_header_token": "Authorization",
"notification_token": "Bearer ANB7xKhiUZmwltVd3f1odcHHM9VAwg02kwmLwtZwHv3S",
"allow_guest_login": true
}'
Ambiente de producción:
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 '{
"notification_url": “https://notification-url.com”,
"codebtor_required": false,
"latest_dependent_worker_payrolls": 6,
"latest_independent_worker_payrolls": 10,
"email_notify_schedule": true,
"salary_multiplier": 3,
"notification_header_token": "Authorization",
"notification_token": "Bearer ANB7xKhiUZmwltVd3f1odcHHM9VAwg02kwmLwtZwHv3S",
"allow_guest_login": true
}'
Obtención de configuración
Mediante providerId:
curl --location --request GET
'https://api.mercadolibre.com/vis-transactions-hub/configurations/provider/{providerId}?scope=stage' \
--header 'Authorization: Bearer {{ACCESS_TOKEN}}' \
Nota: es importante hacer el llamado con el id de seller de prueba y añadir como queryParam scope=stage.
Ambiente de producción:
curl --location --request GET
'https://api.mercadolibre.com/vis-transactions-hub/configurations/provider/{providerId}' \
--header 'Authorization: Bearer {{ACCESS_TOKEN}}' \
Mediante sellerId:
curl --location --request GET
'https://api.mercadolibre.com/vis-transactions-hub/configurations/seller/{sellerId}?scope=stage' \
--header 'Authorization: Bearer {{ACCESS_TOKEN}}' \
Nota: es importante hacer el llamado con el id de seller de prueba y añadir como queryParamscope=stage.
Ambiente de producción:
curl --location --request GET
'https://api.mercadolibre.com/vis-transactions-hub/configurations/seller/{sellerId}' \
--header 'Authorization: Bearer {{ACCESS_TOKEN}}' \
Respuesta
En ambos casos, mediante providerId y sellerId, el JSON retornado será el siguiente:
{
"provider_id": "123456789",
"notification_url": "https://notification-url.com",
"fantasy_name": "Test Company",
"codebtor_required": false,
"latest_dependent_worker_payrolls": 6,
"latest_independent_worker_payrolls": 12,
"email_notify_schedule": true,
"salary_multiplier": 3,
"notification_token": "gXt2x3qfL22UsqXLUY0egda32sffs2saj8UFyhw3Sw==",
"notification_header_token": "ne/GHVXAv2x9YxzJbCKzMA==",
"allow_guest_login": true
}
Descripción de atributos
A continuación se detallan las validaciones en cada parámetro para obtener una configuración:
Variable | Tipo | Descripción | provider_id | String | Identificador único de proveedor o seller. |
---|---|---|
notification_url | String | URL para recibir notificaciones de agendas. |
fantasy_name | String | Nombre de fantasía asociado al usuario. |
codebtor_required | Boolean | Requisito de aval. |
latest_dependent_worker_payrolls | Integer | Cantidad de últimas liquidaciones de sueldo. |
latest_independent_worker_payrolls | Integer | Cantidad de boletas de honorarios. |
email_notify_schedule | Boolean | Notificación de agendas por correo al partner. |
salary_multiplier | Double | Factor multiplicador de renta. |
notification_token | String | Token de autenticación para recibir notificaciones de agendas. |
notification_header_token | String | Header asociado al token para recibir notificaciones de agendas. |
allow_guest_login | Boolean | Permite agendas de usuarios no logueados. |
Marcado y Desmarcado de ítems
Este endpoint se utiliza para marcar ítems que no están con Solicitud de Visita para que sean convertidos al modelo con Solicitud de visita y viceversa, esta acción dependerá del campo enable_rex enviado
En caso de que ya se intentara marcar o desmarcar y por algún motivo el proceso falle, se puede ejecutar este endpoint para intentar marcarlo nuevamente.
En el caso de stage y producción, los parámetros para hacer la llamada son los siguientes:
Campo | Descripción | Ejemplo | seller_id | ID del seller al cual pertenecen los ítems. | 12345678 |
---|---|---|
item_ids | Corresponde a los ítems que van a ser marcados. |
Debe ser un arreglo donde los ids deben estar todos juntos y separados por comas (,)
ej: MLC123,MLC321
Nota: los ítems que se vayan a marcar, deben pertenecer al “seller_id” que se haya colocado
|
enable_rex | Corresponde a la acción de convertir o revertir item con Solicitud de Visita. | Para convertir un item con Solicitud de visita se debe colocar en true Para revertir un item con Solicitud de visita se debe colocar en false. |
Nota: es importante hacer el llamado con el id de seller de prueba y añadir 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 producción:
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
}'
Y el JSON retornado será el lista de ítems marcados/desmarcados:
[
"MLC123",
"MLC321"
]
APIs
Notificación de estados de agenda
Cuando desde el Portal Inmobiliario o el marketplace de Mercadolibre.cl, se realice una intención de visita por parte del cliente (buyer) o cuando se actualice una agenda a cualquier otro estado de forma interna, se les notificará por medio de un llamado a un endpoint (el cual debe ser expuesto por cada partner).
Este endpoint debe tener como sufijo: /scheduling, por ejemplo:
https://api.partner.cl/api/v1/ao/scheduling
El body es el siguiente (método POST):
{
scheduling_id: 123456789,
status: “schedule_created”
}
Donde el valor de scheduling_id corresponde al ID de la agenda y el valor de status corresponde al estado al que se actualizó la agenda en nuestro sistema.
Para el campo status puede tomar los siguientes valores:
Status | Descripción |
---|---|
schedule_created | Agenda creada desde Portal Inmobiliario o marketplace de MercadoLibre.cl |
schedule_confirmed | Agenda confirmada con una fecha y hora en que se debe realizar la visita |
schedule_modified | Agenda modificada donde se cambia la fecha y hora en que se debe realizar la visita |
schedule_canceled | Agenda cancelada donde se indica el motivo por el que se cancela |
schedule_expired | Agenda expirada de forma interna después de 72 hs. hábiles desde su creación por no gestión |
schedule_completed | Agenda completada, que indica que la visita se realizó |
Visita
Generar Agenda
Para simular una agenda desde el portal de Mercado Libre en Stage debe hacerse mediante la siguiente url:
Ambiente de stage:
https://www.mercadolibre.cl/agendar/visita-inmuebles/{itemId}?scope=stage
Es importante resaltar que esta url se debe utilizar directamente en el buscador reemplazando el parámetro {itemId} por el correspondiente a la publicación y por otro lado tanto el usuario como la publicación deben ser de prueba por lo cual no se deben utilizar datos productivos.
El parámetro para especificar la publicación sobre la cual crear la agenda es:
{itemId}
El cual representa el ID de la publicación, ejemplo: MLC916101223.
Obtención detalle de 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: es importante hacer el llamado con el id de seller de prueba y añadir como queryParam scope=stage.
Ambiente de producción:
curl --location --request GET
'https://api.mercadolibre.com/vis-transactions-hub/{providerId}/entities/schedules/{scheduleId}' \
--header 'Authorization: Bearer {{ACCESS_TOKEN}}'
En ambos casos, el parámetro para hacer la llamada es:
{scheduleId}
El cual representa el ID de la agenda a consultar.
Y el JSON retornado será el siguiente::
{
"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"}],
}
Sus respectivos tipos de datos son:
Variable | 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) |
scheduling_time_period | List (String) |
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 producción:
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": {}
}'
En ambos casos el body es el siguiente:
{
scheduling_id: "int",
status_code: "int",
status_name: "string",
message: "string",
timestamp: "ISO 8601", // ej: 2011-10-05T14:48:00.000Z
data: "data": {}
}
Actualización status agenda
A continuación se detallan el dominio de variable data:
Status_code | Status_name | Descripción | Body |
---|---|---|---|
2 | scheduling_canceled | Agenda cancelada | { code: "string", reason: "string" } |
3 | scheduling_modified | Horario modificado | |
4 | visit_success | Visita exitosa | {} |
6 | scheduling_confirmed | Horario confirmado | { scheduling_date: "date", scheduling_time: "string" } |
7 | scheduling_contacting | Gestionando visita | {} |
Scheduling_canceled
El dominio de variable del Status_code: 2 (scheduling_canceled) es el siguiente:
Code | Reason | Descripción | Usada por | Usada por tipoo de propriedad |
---|---|---|---|---|
2 | buyer_out_of_reach | No se puede comunicar con el buyer. | Integradores, Panel. | Arriendo/Venta |
6 | requirements_not_met | buyer no cumple requisitos. | Integradores, Panel. | Arriendo |
14 | buyer_searching_for_later | buyer busca para más adelante. | Integradores, Panel. | Arriendo |
15** | property_not_available | Propiedad no está disponible. | De forma interna. | N/A |
16 | buyer_cancel_visit | Cancelada por el buyer. | Integradores, Panel. | Arriendo/Venta |
18** | property_not_available_from_life_cycle | Propiedad no disponible por ciclo de vidas. | De forma interna. | N/A |
19** | property_not_available_from_pack_finished | Propiedad no disponible por paquete de publicaciones finalizado. | De forma interna. | N/A |
20** | property_not_available_from_seller_finished | Propiedad no disponible porque el seller la finalizó. | De forma interna. | N/A |
21** | property_not_available_from_partner_finished | Propiedad no disponible porque integrador la finalizó. | De forma interna. | N/A |
22** | property_not_available_from_feedback_seller | Propiedad no disponible por feedback del seller indicando que no está disponible. | De forma interna. | N/A |
23** | property_not_available_from_feedback_buyer | Propiedad no disponible por feedback del buyer indicando que no está disponible. | De forma interna. | N/A |
24** | property_not_available_from_seller_penalty | Propiedad no disponible por penalización al seller. | De forma interna. | N/A |
25 | property_not_available_seller | Cancelada por el seller. | Integradores, Panel. | Arriendo/Venta |
(**) Estas razones se utiliza para señalar aquellas agendas que fueron canceladas por los siguientes motivos:
- Automática para las agendas que son canceladas por ciclo de vida del ítem.
- Automática por finalización del paquete de destaque.
- Mecanismo de control de disponibilidad ejecutado por MercadoLibre o tras finalizar una publicación.
- Seller que finaliza manualmente su ítem y este posee agendas asociadas.
Cabe destacar que estas razones son solo de uso interno, por lo que no deberían usarse directamente en los requests.
Como estas son razones de forma automática e interna, se estará notificando el estado de la cancelación tal como indica en la sección notificación de estados de agenda.
Agenda expirada (proceso automático interno)
El sistema cuenta con un proceso automático que se encarga de expirar todas las agendas que no han sido gestionadas y se encuentran en el estado de “agendas creadas”, esta acción se ejecuta después de 72 horas hábiles.
Las agendas creadas que son expiradas quedan con la siguiente condición:
Code | Reason | Descripción | 1 | seller_no_response | Expiró la agenda por no respuesta del seller dentro del SLA (72hs). |
---|
Como esta es una razón de forma automática e interna, se estará notificando el estado de la expiración tal como indica en la sección notificación de estados de agenda.
Unidades MultiFamily
Edición de precio, aumento o disminución de unidades
Este endpoint se utiliza para actualizar el precio de las unidades así como también aumentar o disminuir el stock de las mismas. Con el objetivo de que no se muestren unidades en la publicación que no están disponible y por ende no se vayan generando nuevos agendamientos, en el caso de estar nuevamente disponible se puedan mostrar. Adicionalmente ofrece la opción de actualizar el precio de las unidades.
El endpoint soporta la actualización de una lista de unidades mediante su campo units en el body.
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: es importante hacer el llamado con el id de seller de prueba y añadir como queryParam scope=stage.
Ambiente de producción:
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"
}
]
}
}'
En ambos casos el body es el siguiente:
{
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 continuación se detalla los valores de status_code y status_name.
Status_code | Status_name | 1 | update_units |
---|
A continuación se detalla el dominio del atributo operation:
Operation | Descripción | price_updated | Permite actualizar el precio de la unidad. |
---|---|
unit_added | Permite aumentar la unidad. |
unit_removed | Permite disminuir la unidad. |