Autorizaciones de Envíos Domésticos

Contenidos

Ten en cuenta que el Web Service del correo debe proporcionar un endpoint HTTP REST contra el que Mercado Libre pueda autorizar envíos.

Una vez que el envío se registra en Mercado Libre y está listo para ser despachado, se manda una solicitud POST de autorización al Web Service del correo utilizando la siguiente llamada:

POST /shipments/shipment_id/authorization
Nota:
  • El identificador de envío (shipment_id) es único del lado de Mercado Envíos y deberá utilizarse para validar que no ha sido autorizado con anterioridad, teniendo en cuenta que existe un mecanismo de reintento en caso de que la llamada falle.
  • Es posible que el identificador de envío esté asociado a más de un tracking number, pero en todo momento solo debe existir un único tracking number “activo” del lado del correo.
  • Idempotencia: en caso de recibir un request con un envío previamente autorizado, el servicio deberá responder con un “HTTP Code” = 200 y con el mismo body y tracking number que se retornó al momento de la autorización original.
  • Un envío cancelado podría volver a autorizarse en un futuro por lo que se debe tener en cuenta el siguiente flujo.
  • Mercado Libre enviará en todos los campos datos con longitudes variables y que pueden cambiar con el tiempo, es responsabilidad del correo truncar los datos de acuerdo a sus requisitos de almacenamiento.
Importante:
El Tracking Number de envío sólo debe cambiar ante “n” autorizaciones si y solo si se solicitó una cancelación previa. En caso de que esto no ocurra, deberá responder con idempotencia.

Dependiendo de si la autorización es satisfactoria o no, se espera que el servicio del correo devuelva un resultado de acuerdo a lo detallado en la sección “Status Codes”. En caso de error, se volverá a intentar la comunicación acorde al esquema de reintento definido en la integración.

Importante:
Para seguridad en autorizaciones se utilizará OAuth 2.0

Formato Request

Dentro del body se enviará un objeto JSON con los campos listados a continuación:

NombreTipo de datoDescripciónPresencia del campo en el request
idLongIdentificador único del envío usado por Mercado Libre que se requiere autorizar. Este ID servirá posteriormente para poder notificar las eventos que van ocurriendo en el flujo operativo del envío.Siempre presente en el request
transport_order_idStringIdentificador único del tramo de transporteSiempre presente en el request
directionStringIndica la dirección del envío. Los valores permitidos son:
  • Si la dirección es del vendedor al comprador → "foward"
  • Si la dirección es del comprador al vendedor (devolución) → "return"
Siempre presente en el request
carrier_informationNodoContiene elementos relevantes para el carrier.Siempre presente en el request
carrier_information.contractStringIdentifica el contrato/servicio definido por el carrier con el cual se va a autorizar el envío. Por ejemplo envío a domicilio desde el XD, envío a sucursal de DS, etc.Opcional
carrier_information.agencyNodoContiene información relacionada a la agencia de destino. Mandatorio solo cuando es un envío a sucursal.Opcional
carrier_information.agency.idStringId que le da Mercado Libre a la agencia.Siempre presente en el request
shipment_informationNodoContiene toda la información que se considera relevante para la autorización del envío. Sender, receiver, item, etc. Las medidas son en centímetros y los pesos en gramos.Siempre presente en el request
shipment_information.packageNodoInformación relacionada al paquete.Siempre presente en el request
shipment_information.package.itemsNodoInformación relacionada a los items.Siempre presente en el request
shipment_information.package.items.item_idStringNúmero identificatorio del item en Mercado Libre.Siempre presente en el request
shipment_information.package.items.descriptionStringDescripción del item en Mercado Libre.Siempre presente en el request
shipment_information.package.items.quantityNumericCantidad de unidades por item.Siempre presente en el request
shipment_information.package.amountNumericMonto abonado por el contenido del paquete.Siempre presente en el request
shipment_information.package.dimensionsNodoDimensiones y peso del paquete.Siempre presente en el request
shipment_information.package.dimensions.heightNumericAlto del paquete en centímetros.Siempre presente en el request
shipment_information.package.dimensions.lengthNumericLargo del paquete en centímetros.Siempre presente en el request
shipment_information.package.dimensions.widthNumericAncho del paquete en centímetros.Siempre presente en el request
shipment_information.package.dimensions.weightNumericPeso del paquete en gramos.Siempre presente en el request
shipment_information.receiverNodoInformación relacionada al receiver.Siempre presente en el request
shipment_information.receiver.full_nameStringNombre completo o Razón Social del receiver.Siempre presente en el request
shipment_information.receiver.first_nameStringNombre del receiver.Siempre presente en el request
shipment_information.receiver.last_nameStringApellido del receiver.Siempre presente en el request
shipment_information.receiver.phoneNodoInformación relacionada al teléfono del receiver.Opcional
shipment_information.receiver.phone.numberStringNúmero telefónico. Sólo números.Opcional
shipment_information.receiver.addressNodoInformación relacionada a direccion del destino.Siempre presente en el request
shipment_information.receiver.address.street_nameStringNombre de la calle de destino.Siempre presente en el request
shipment_information.receiver.address.street_numberStringNúmero de la calle de destino.Opcional
shipment_information.receiver.address.intersectionStringCalle secundaria.Siempre presente en el request (Ecuador)
shipment_information.receiver.address.address_lineStringCampo compuesto por los campos street_name y street_number del destino.Siempre presente en el request
shipment_information.receiver.address.commentStringComentarios sobre la dirección del destino.Opcional
shipment_information.receiver.address.zip_codeStringCódigo postal del destino.Siempre presente en el request (Argentina, Brasil, México, Perú)
shipment_information.receiver.address.cityNodeCiudad de destino.Siempre presente en el request
shipment_information.receiver.address.city.idStringIdentificador único que le da Mercado Libre a la ciudad.Siempre presente en el request (Colombia, Uruguay, Chile, Ecuador)
shipment_information.receiver.address.city.nameStringNombre de la ciudadSiempre presente en el request
shipment_information.receiver.address.stateNodeEstado, departamento o provincia de destino.Siempre presente en el request
shipment_information.receiver.address.state.idStringIdentificador único que le da Mercado Libre al estado en Formato ISO 3166.Siempre presente en el request
shipment_information.receiver.address.state.nameStringNombre del estado.Siempre presente en el request
shipment_information.receiver.address.countryNodePaís de destino.Siempre presente en el request
shipment_information.receiver.address.country.idStringIdentificador único que le da Mercado Libre al país en Formato ISO 3166.Siempre presente en el request
shipment_information.receiver.address.country.nameStringNombre del país.Siempre presente en el request
shipment_information.receiver.address.neighborhoodNodeBarrio de destino.Opcional
shipment_information.receiver.address.neighborhood.idStringIdentificador único del vecindario.Opcional
shipment_information.receiver.address.neighborhood.nameStringNombre del vecindario.Opcional
shipment_information.receiver.address.municipalityNodeMunicipalidad de destino.Opcional
shipment_information.receiver.address.municipality.idStringIdentificador único que le da Mercado Libre al municipio.Opcional
shipment_information.receiver.address.municipality.nameStringNombre del municipio.Opcional
shipment_information.receiver.address.geolocationNodeTiene la localización de la dirección.Opcional
shipment_information.receiver.address.geolocation.geolocation_typeStringPuede ser alguno de los valores siguientes:
  • APPROXIMATE: geolocalización aproximada.
  • GEOMETRIC_CENTER: se ubica el centro de una región que se usa de referencia.
  • RANGE_INTERPOLATED: restringe la precisión al punto medio de 2 puntos de referencia cercanos.
  • ROOFTOP: Indica que la ubicación es exacta.
  • UNKNOWN: Indica que la ubicación no fue validada.
Siempre presente en el request
shipment_information.receiver.address.geolocation.latitudeNumericLatitud de la localización en formato de número con 8 decimales.Siempre presente en el request
shipment_information.receiver.address.geolocation.longitudeNumericLongitud de la localización en formato de número con 8 decimales.Siempre presente en el request
shipment_information.receiver.identificationNodoInformación relacionada a la identificación del receiver.Siempre presente en el request (Chile y Brasil)
shipment_information.receiver.identification.typeStringTipo de identificación del receiver.Siempre presente en el request (Chile y Brasil)
shipment_information.receiver.identification.numberNumericNúmero de identificación del receiver.Siempre presente en el request (Chile y Brasil)
shipment_information.senderNodoInformación relacionada al sender.Siempre presente en el request
shipment_information.sender.full_nameStringNombre completo o Razón Social del sender.Siempre presente en el request
shipment_information.sender.first_nameStringNombre del sender.Siempre presente en el request
shipment_information.sender.last_nameStringApellido del sender.Siempre presente en el request
shipment_information.sender.phoneNodoInformación relacionada al teléfono del sender.Opcional
shipment_information.sender.phone.numberStringNúmero telefónico. Sólo números.Siempre presente en el request
shipment_information.sender.addressNodoInformación relacionada a la dirección de origen.Siempre presente en el request
shipment_information.sender.address.street_nameStringNombre de calle del origen.Siempre presente en el request
shipment_information.sender.address.street_numberStringNúmero de calle del origen.Optional
shipment_information.sender.address.intersectionStringCalle secundaria.Siempre presente en el request (Ecuador)
shipment_information.sender.address.address_lineStringCampo compuesto por los campos street_name y street_number del origen.Siempre presente en el request
shipment_information.sender.address.commentStringComentarios sobre la dirección del origen.Opcional
shipment_information.sender.address.zip_codeStringCódigo postal del origen.Siempre presente en el request (Argentina, Brasil, México, Perú)
shipment_information.sender.address.cityNodeCiudad de origen.Siempre presente en el request
shipment_information.sender.address.city.idStringIdentificador único que le da Mercado Libre a la ciudad.Siempre presente en el request (Colombia, Uruguay, Chile, Ecuador)
shipment_information.sender.address.city.nameStringNombre de la ciudad.Siempre presente en el request
shipment_information.sender.address.stateNodeEstado, departamento o provincia de origen.Siempre presente en el request
shipment_information.sender.address.state.idStringIdentificador único que le da Mercado Libre al estado en Formato ISO 3166.Siempre presente en el request
shipment_information.sender.address.state.nameStringNombre del estado.Siempre presente en el request
shipment_information.sender.address.countryNodePaís de origen.Siempre presente en el request
shipment_information.sender.address.country.idStringIdentificador único que le da Mercado Libre al país en Formato ISO 3166.Siempre presente en el request
shipment_information.sender.address.country.nameStringNombre del país.Siempre presente en el request
shipment_information.sender.address.neighborhoodNodeBarrio de origenOpcional
shipment_information.sender.address.neighborhood.idStringIdentificador único del vecindario.Opcional
shipment_information.sender.address.neighborhood.nameStringNombre del vecindarioOpcional
shipment_information.sender.address.municipalityNodeMunicipalidad de origen.Opcional
shipment_information.sender.address.municipality.idStringIdentificador único del municipio.Opcional
shipment_information.sender.address.municipality.nameStringNombre del municipio.Opcional
shipment_information.sender.address.geolocationNodeTiene la localización de la direcciónOpcional
shipment_information.sender.address.geolocation.geolocation_typeStringPuede ser alguno de los valores siguientes:
  • APPROXIMATE: geolocalización aproximada.
  • GEOMETRIC_CENTER: se ubica el centro de una región que se usa de referencia.
  • RANGE_INTERPOLATED: restringe la precisión al punto medio de 2 puntos de referencia cercanos.
  • ROOFTOP: indica que la ubicación es exacta.
  • UNKNOWN: indica que la ubicación no fue validada.
Siempre presente en el request
shipment_information.sender.address.geolocation.latitudeNumericLatitud de la localización en formato de número con 8 decimales.Siempre presente en el request
shipment_information.sender.address.geolocation.longitudeNumericLongitud de la localización en formato de número con 8 decimales.Siempre presente en el request
shipment_information.sender.address.facility_idStringIdentifica una única instalación para la direcciónOpcional
shipment_information.sender.identificationNodoInformación relacionada a la identificación del sender.Siempre presente en el request (Chile y Brasil)
shipment_information.sender.identification.typeStringTipo de identificación del sender.Siempre presente en el request (Chile y Brasil)
shipment_information.sender.identification.numberNumericNúmero de identificación del sender.Siempre presente en el request (Chile y Brasil)
testBooleanIndica que la request enviada es para pruebas.Opcional
keywordStringEs la Palabra Clave en formato HASH (SHA 256). El valor de este parámetro puede ser vacio. En caso de encontrarse un valor, el Carrier deberá solicitar la Palabra Clave al receptor del paquete.Opcional
Nota:
Cabe destacar que el orden de importancia de los datos de cuenta del correo es el siguiente:
  • Contract: es el número que utiliza el correo para identificar el contrato (convenio) de precios establecidos con Mercado Libre. Lo usan para saber cómo deben cobrar esos envíos. Por ejemplo: El precio de un envío a domicilio por “drop_shipping” tiene un precio distinto al de “fulfillment” por alguna cuestión definida en un contrato. Es el campo más utilizado por los correos.
  • Account: es el identificador que utiliza el correo para diferenciar las distintas áreas de Mercado Libre. Por ejemplo CBT y ME tienen diferente account id del lado del correo.
  • User: es un usuario de sistema asignado al cliente de Mercado Libre.
  • Password: es la contraseña asociada a ese usuario.

Formato Response

Dentro del body, el sistema devolverá todos los datos resultantes de la autorización, listados a continuación:

NombreTipo de datoDescripciónTipo
idLongIdentificador único del envío usado por Mercado Libre que se requiere autorizar.Mandatorio
statusStringEstado del pedido de autorización:
  • AUTHORIZED
  • FAILED
  • ERROR
Mandatorio
status_messageStringCualquier detalle relevante del estado.Mandatorio en caso de fallo (status = FAILED o status = ERROR).
tracking_numberStringNúmero de tracking.Mandatorio en caso de que la autorización sea procesada con éxito (status = AUTHORIZED).
authorization_informationNodoContiene información relativa a la fecha y hora de la actualización junto con cualquier información relevante para el armado de la etiqueta de envío.
authorization_information.dateDate (ISO 8601)Valores válidos: en UTC 2001-07-04T12:08:56.235Z o en hora local relativa 2001-07-04T12:08:56.235-07:00.Mandatorio en caso de éxito (status = AUTHORIZED)
authorization_information.custom_dataNodoContiene todos los datos necesarios para el armado de la etiqueta. Pueden ser tantos conjuntos de claves-valores como sean necesarios para el armado.Opcional
authorization_information.custom_data.keyString|Long“Key” hace referencia al nombre de la clave del conjunto clave-valor particular. El campo “valor” puede ser texto o numérico.Mandatorio

Performance

Importante:
Se espera que el tiempo de respuesta promedio del correo sea menor a un segundo .

Status Codes

StatusCódigo HTTPDescripciónAcción
AUTHORIZED200Cuando la autorización fue procesada satisfactoriamenteEl envío ya fue autorizado y no se volverá a reintentar.
FAILED400Cuando la autorización no pudo ser procesada por un error en el request. Se espera que se retorne “status”: “FAILED” junto con el “status_message” describiendo el motivo del error.Dependiendo de la naturaleza del error, se intentarán corregir los datos, antes de volver a procesar la solicitud. Podrían existir reintentos periódicos.
ERROR500Cualquier error del lado del servidor. En este caso, status y status_message son opcionales.Se volverá a intentar indefinidamente hasta obtener una respuesta satisfactoria de acuerdo al esquema de reintento definido.

Formato Request OAuth

Para el mecanismo de autenticación a través de la generación de un token con OAuth, se debe agregar el siguiente encabezado a la petición:

--request POST 'https://hostname/shipments/{shiment_id}/authorization'
--header 'Authorization: Bearer + TOKEN'
--body 'Se mantiene lo descrito en cada integración'
Nota:

Una vez implementada la solución de OAuth, se deberá deprecar el uso de usuario y contraseña en las integraciones en favor del uso del token. Los campos a deprecar son los siguientes:

CampoTipoDescripción
carrier_information.userStringIdentifica un usuario de sistema del correo asignado al cliente de Mercado Libre.
carrier_information.passwordStringIdentifica la contraseña asociada al usuario del sistema.

Ejemplos

Request:

POST https://hostName/shipments/26379079680/authorization
{
    "id":10101033319242,
    "transport_order_id": "5c81e696e6d9183ea9190a58c13d4de71816b743",
    "direction":"forward",
    "carrier_information":{
        "contract":"",
    },
    "shipment_information":{
        "sender":{
            "first_name":"PY",
            "last_name":"S.A.",
            "phone":{
                "number":"522175123929",
            },
            "address":{
                "address_line":"Calle 12",
                "street_name":"Calle 12",
                "street_number":"S/N",
                "intersection":"Calle 21",
                "comment":"",
                "zip_code":"1870",
                "city":{
                    "id":"TUxBQ0xBTWF0YW56",
                    "name":"La Matanza"
                    },
                "state":{
                    "id":"AR-B",
                    "name":"Buenos Aires"
                    },
                "country":{
                    "id":"AR",
                    "name":"Argentina"
                    },
                "neighborhood":{
                    "id":null,
                    "name":"Villa Celina"
                    },
                "municipality":{
                    "id":null,
                    "name":"Villa Celina"
                    },
                "geolocation":{
                    "geolocation_type":"ROOFTOP",
                    "latitude":-14.10100206,
                    "longitude":-52.10104811
                    },
                "facility_id":"101010"
            },
            "full_name":"GOLANDS",
        },
        "receiver":{
            "first_name":"MEL",
            "last_name":"PY",
            "phone":{
                "number":"10108508106",
            },
            "address":{
                "address_line":"Calle 23",
                "street_name":"Calle 23",
                "street_number":"S/N",
                "intersection":"Calle 32",
                "comment":"",
                "zip_code":"1625",
                "city":{
                    "id":"TUxBQ0VTQzQ3YTc0",
                    "name":"Escobar"
                    },
                "state":{
                    "id":"AR-B",
                    "name":"Buenos Aires"
                    },
                "country":{
                    "id":"AR",
                    "name":"Argentina"
                    },
                "neighborhood":{
                    "id":null,
                    "name":null
                    },
                "municipality":{
                    "id":null,
                    "name":null
                    },
                "geolocation":{
                    "geolocation_type":"RANGE_INTERPOLATED",
                    "latitude":-32.101012822,
                    "longitude":-52.10102059
                    },
                "delivery_preference":"business"
            },
            "full_name":"Mel py",
            "id":10010389392
        },
        "package":{
            "items":[
                {
                "item_id":"MLA101010618394",
                "description":"Lampara 100w",
                "quantity":1
                }
            ],
            "dimensions":{
                "height":15,
                "width":25,
                "length":70,
                "weight":1900
            },
            "amount":2420,
        },
    "test":false,
    "keyword": "3bc405c30cadb4e6eefdf0cff899abcf8234d761c9a3ea1b2f510601ae5fc504"
}

Response:

Authorized (200 OK)

{
    "id": "10101033319242",
    "status":"AUTHORIZED",
    "status_message":"OK",
    "tracking_number": "ASDfgh123asd",
    "authorization_information": {
        "date": "2001-07-04T12:08:56.235-07:00",
        "custom_data":{
            "ruta_1":"RUTA"
        }
    }
}

Failed (400 FAILED)

{
    "error_code": "invalid_user_information.buyer",
    "status_message":"Missing receiver information",
    "status": "FAILED"
}

Error (500 ERROR)

{
    "status_message":"Internal server error",
    "status": "ERROR"
}