Documentación Mercado Libre

Descubre toda la información que debes conocer sobre las APIs de Mercado Libre.
circulos azuis em degrade

Documentación

Última actualización 03/10/2024

Experiencia para inmuebles

Desde Mercado Libre queremos generar una nueva experiencia de solicitud de visita 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.
  • Importante:
    Este recurso está disponible para inmuebles con foco en MLC y MLM.

    Consideraciones

    Actualmente, tenemos dos ambientes disponibles para integración:

    • 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.

    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

    1. La cuenta del seller profesional debe estar registrada.
    2. Registrar la aplicación para la obtención del token.
    3. Autenticación como seller o integrador según corresponda.
    4. Generar configuración del seller.
    5. Publicar ítems en la plataforma.
    6. Marcar ítems como solicitud de visita.
    7. Obtener detalles de la agenda para verificar el flujo.

    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

    Nota:
    La creación de configuración NO aplica para sellers que tienen SÓLO propiedades en VENTAS .

    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 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.

    Nota:
    Es importante hacer el llamado con el id de seller de los items en el body y añadir como queryParam scope=stage. .


    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

    Importante:
    A partir del 28 de agosto, ampliaremos las notificaciones de cambios de estado de la agenda. Además de los cambios ya notificados (creada, cancelada, expirada), ahora incluiremos agenda confirmada, modificada y completada. Este cambio busca mejorar la comunicación y mantenerlos informados sobre todos los detalles relevantes.

    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ó
    Nota:
    El objetivo de notificar los estados es para indicar que en nuestro sistema la agenda ya se encuentra actualizada. .

    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
    email 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” }
    4 visit_success Visita exitosa {}
    6 scheduling_confirmed Horario confirmado { scheduling_date: date scheduling_time: string }

    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:

    1. Automática para las agendas que son canceladas por ciclo de vida del ítem.
    2. Automática por finalización del paquete de destaque.
    3. Mecanismo de control de disponibilidad ejecutado por MercadoLibre o tras finalizar una publicación.
    4. 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

    Nota:
    Esta sección NO aplica para propiedades en VENTA. .

    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.

    Nota:
    para el caso de la operación unit_added sí se envía el precio este también se actualiza. Para el caso de remover unidades no se permite la actualización del precio.