Documentação do Mercado Livre

Confira todas as informações necessárias sobre as APIs Mercado Livre.
circulos azuis em degrade

Documentação do

Última atualização em 10/09/2024

Frete Dinâmico

Flete Dinâmico é uma funcionalidade do Mercado Envios 1 que agiliza a seleção de preços e prazos de envio para vendedores, fornecendo aos compradores informações precisas sobre os prazos de entrega. Essa configuração verifica em tempo real os preços e condições de envio, mostrando o custo do envio antes da compra, aprimorando a experiência e a eficiência logística. Além disso, para registrar corretamente o desenvolvimento dessa funcionalidade, é necessário passar por um processo de homologação.


Dinâmica de Homologação

A homologação é um processo no qual o Mercado Livre verifica e aprova uma URL externa para que os usuários possam se registrar no Mercado Livre a partir desse site de maneira segura e confiável. Isso envolve testes técnicos, avaliação de segurança e a implementação de medidas necessárias para garantir a autenticidade e proteção dos dados dos usuários. Uma vez aprovada, a URL se torna um canal válido para os usuários do ME1.


Requisitos de Homologação

A continuación, se presentan los requisitos de homologación para asegurar una integración exitosa con nuestra plataforma de flete dinâmico:

  • Cumprimento do Contrato
  • Tempo de Resposta Ótimo
  • Localização da Infraestrutura
  • Especificações de Origem e Destino de Dados
  • Uso de Cache
  • Monitoramento de Erros
  • Contingência do Mercado Livre

Cumprimento do Contrato

A seguir, apresentamos uma abordagem passo a passo ao criar o endpoint para homologação:

  • A URL não tem uma estrutura específica, proporcionando flexibilidade na configuração.
  • Cada solicitação deve conter apenas um item de um vendedor. Isso é fundamental para manter a eficiência na transmissão de dados.
  • Utilize o método HTTP GET para acessar o endpoint. Esse método é adequado para solicitar dados e é comumente usado em integrações web.
  • Detalhe claramente a fonte de dados (origem) e o sistema de destino. Compreender esses aspectos é fundamental para garantir um fluxo de dados sem problemas e preciso.
Importante:
Reúne os seguintes elementos necessários:
  • URL ou endpoint que deseja registrar.
  • Headers necessários para a comunicação.
  • Formato do corpo ou JSON request que esteja em conformidade com as especificações.
  • Nome e ID da sua aplicação.

Considere criar um vídeo curto que demonstre o desenvolvimento realizado para validar e verificar as especificações do contrato. Isso pode ser útil para documentar o processo e compartilhar sugestões. Para a criação da aplicação, sugerimos revisar a documentação: Registre sua aplicação.


É importante notar que o processo de homologação é reservado exclusivamente aos integradores certificados. Se você pertence a este grupo, convidamos você a gerar um ticket para iniciar o processo de homologação. Caso você ainda não seja certificado, recomendamos consultar nosso Developer Partner Program para obter mais informações sobre como obter sua certificação.

Tempo de Resposta Ótimo

Esse enfoque é essencial para garantir uma experiência de usuário eficiente e evitar problemas de integração com os vendedores. Para isso:

  • Familiarize-se com a necessidade de manter o tempo de resposta abaixo de 400 ms e compreenda sua importância para uma integração bem-sucedida.
  • Antes de ativar o endpoint, submeta-o a uma validação de carga inicial. Isso implica avaliar seu tempo de resposta em condições normais de uso.
  • Se o tempo de resposta ultrapassar o limite, são necessárias ações corretivas. Isso pode incluir a revisão e otimização do código e da infraestrutura.
  • Se o tempo de resposta atender ao requisito de 400 ms, a integração é aprovada e pode ser ativada para os vendedores.
  • Certifique-se de continuar otimizando o tempo de resposta de forma contínua para proporcionar uma experiência de usuário excepcional.

Localização da Infraestrutura

Seguindo esses passos, você poderá tomar decisões informadas para melhorar o desempenho de sua aplicação com base na localização da infraestrutura:

  • Considere que a atual infraestrutura de flete dinâmico está localizada na região leste dos Estados Unidos, mais especificamente, em Virginia.
  • Avalie se é necessário otimizar sua aplicação ou ajustar a configuração para aproveitar ao máximo a localização da infraestrutura.

Origem e Destino de Dados

Especificações da fonte de dados (origem)

As especificações da fonte de dados fazem parte do protocolo de comunicação ou intercâmbio de dados no processo de homologação:


Exemplo por Zip_Code:

{
  "seller_id": 337352780,
  "buyer_id": 3123212,
  "declared_value": 69.9,
  "items": [
    {
      "id": "MLB1223500643",
      "variation_id": 0,
      "category_id": "ABC1234",
      "price": 69.9,
      "quantity": 1,
      "sku": "RB-PC890A",
      "store_id": 231,
      "dimensions": {
        "height": 10,
        "width": 10,
        "length": 31,
        "weight": 500
      }
    }
  ],
  "destination": {
    "type": "zipcode",
    "value": "88063038"
  },
  "origin": {
    "type": "zipcode",
    "value": "88063038"
  }
}

Exemplo por City:

{
  "seller_id": 337352780,
  "buyer_id": 3123212,
  "declared_value": 69.9,
  "items": [
    {
      "id": "MLB1223500643",
      "variation_id": 0,
      "category_id": "ABC1234",
      "price": 69.9,
      "quantity": 1,
      "sku": "RB-PC890A",
      "store_id": 231,
      "dimensions": {
        "height": 10,
        "width": 10,
        "length": 31,
        "weight": 500
      }
    }
  ],
"destination": {
    "type": "city",
    "value": "Ñuble/Yungay"
  },
  "origin": {
    "type": "city",
    "value": "Metropolitana/Pudahuel"
   }
}

Parâmetros de resposta:

  • seller_id (string)​​: obrigatório. É a identificação da conta dentro do Mercado Livre.
  • buyer_id (string): opcional. É o identificador do usuário que está realizando a compra no Mercado Livre. Está disponível apenas quando o usuário que está fazendo a cotação está logado na plataforma do Mercado Livre.
  • declared_value (float)​​: opcional. É o valor que será declarado na fatura.
  • items (array): obrigatório. Informações sobre o item comprado.
    • items.id (string): obrigatório. É a identificação do produto registrado no Mercado Livre.
    • items.variation_id (string): obrigatório. É a identificação da variante escolhida pelo comprador para a compra, possui dados apenas quando a cotação corresponde a um item com variação.
    • items.category_id (string)​​: opcional. É a identificação da categoria do produto dentro do Mercado Livre.
    • items.price (float)​​: opcional. É o preço unitário do produto multiplicado pela quantidade de itens escolhidos pelo comprador no momento da cotação.
    • items.quantity (int)​​: obrigatório. É a quantidade que será comprada do mesmo produto.
    • items.sku (string)​​: obrigatório. É a identificação do produto ao ser comprado.
    • items.store_id (string)​​: opcional. É a identificação da loja oficial dentro do Mercado Livre.
    • items.dimensions (object)​​: obrigatório. É a lista de medidas de um produto.
      • items.dimensions.length (int)​​: obrigatório. É o comprimento do produto (em centímetros)
      • items.dimensions.width (int)​​: obrigatório. É a largura do produto (em centímetros).
      • items.dimensions.height (int)​​: obrigatório. É a largura do produto (em centímetros).
      • items.dimensions.weight (int)​​: obrigatório. É o peso do produto (em gramas).
  • origin (object)​​: opcional. É a informação do endereço de origem da entrega ou do vendedor.
  • destination (object)​: obrigatório. É a informação do endereço onde o produto será entregue. A seguir, os detalhes de acordo com cada país:

País Detalhe
Brasil Código Postal
Argentina Código Postal
México Código Postal
Chile Região / Comuna
Colômbia Departamento / Localidade
Peru Departamento / Província ou Distrito
Uruguai Departamento / Localidade


Nota:
  • Quando a quantidade de itens for maior que 1, o Mercado Livre usará um algoritmo para consolidar as dimensões na melhor combinação possível para otimizar o espaço. Neste caso, a integração deve usar os valores enviados na solicitação sem realizar nenhuma multiplicação.
  • A resposta deve incluir a cotação correspondente ao item comprado.
  • É possível enviar várias cotações, cada uma com prazo/promessa de entrega e preço diferentes.
  • Todos os valores de resposta são obrigatórios e devem ser fornecidos.

Especificações do destino dos dados (destino)

As especificações do destino de dados fazem parte do protocolo de comunicação ou intercâmbio de dados no processo de homologação:


Exemplo:

{
   "destinations":[
      "88063038"
   ],
   "packages":[
      {
         "dimensions":{
            "height":10,
            "width":10,
            "length":15,
            "weight":500
         },
         "items":[
            {
               "id":"MLB1223500643",
               "variation_id":3123212,
               "quantity":1,
               "dimensions":{
                  "height":10,
                  "width":10,
                  "length":15,
                  "weight":500
               }
            }
         ],
         "quotations":[
            {
               "price":119.88,
               "handling_time":0,
               "shipping_time":4,
               "promise":4,
               "service":99
            },
            {
               "price":0,
               "handling_time":0,
               "shipping_time":6,
               "promise":6,
               "service":99
            }
         ]
      }
   ]
}

Parâmetros de resposta:

  • destinations (array)​​: informação que contém códigos postais ou outras identificações de destinos para os quais os pacotes serão enviados.
  • packages (array)​​: informação que representa os pacotes criados pelo vendedor.
    • packages.dimensions (object): obrigatório. É a lista de medidas do pacote.
  • items (array): obrigatório. Informação sobre o item comprado.
    • items.id (string): obrigatório. É a identificação do item registrado no Mercado Livre.
    • items.variation_id (string): obrigatório. É a identificação da variante escolhida pelo comprador.
    • items.quantity (int)​​: é a quantidade do produto que será enviada.
    • items.dimensions (object)​​: obrigatório. É a lista de medidas do item.
  • quotations (array)​​: obrigatório. informações de frete para um produto.
    • quotations.price (float)​​: é o preço do frete que será apresentado ao comprador.
    • quotations.handling_time (int)​​: é o tempo, em dias úteis, que será utilizado para separar e embalar o produto. Inclui todos os processos anteriores ao envio efetivo do pacote. Caso essa informação não esteja disponível, deve ser devolvido o valor 0.
    • quotations.shipping_time (int)​​: é o tempo, em dias úteis, de trânsito do pacote (desde a entrada no caminhão até a entrega ao comprador).
    • quotations.promise (int)​​: é a soma dos valores de handling_time e shipping_time.
    • quotations.service (int): é o código do serviço/carrier com identificação única, que vai de 0 a 99, atribuído pelo vendedor/integrador.

Nota:
No caso do atributo quotations.service:
  • Este código é de responsabilidade exclusiva do vendedor/integrador, o Mercado Livre apenas o transmite.
  • Este código será utilizado posteriormente no shipping do pedido, no campooption_id para identificar a transportadora.
  • O ID estará na terceira e quarta posição do ID gerado neste campo.
    • Por exemplo se o ID de option_id for 112233445566 o ID do transportador, neste caso, é 22 que deve coincidir com o valor enviado na cotação no campo quotations.service
    • Lembre-de consultar o recurso de shipment utilizando o header x-format-new=true conforme adocumentação.
  • Se você enviar apenas um dígito, será automaticamente completado com um 0 à esquerda. Por exemplo, se você enviar 5, será convertido em 05.
  • No caso de enviar mais de 2 dígitos, a informação não será integrada e o código do carrier retornará "00". Por exemplo, se você enviar 123, a resposta será 00.
  • É fundamental incluir pelo menos um objeto dentro do array quotations.

No caso de ocorrer um erro interno ou se um item estiver relacionado a um erro, a estrutura da resposta deve seguir o seguinte formato:

  • Para o código de erro 3 (sem cobertura), o estado HTTP deve ser 400 (Pedido incorreto).
  • Para qualquer outro código de erro ou erro interno relacionado com a cotação, o estado HTTP deve ser 500 (Erro interno do servidor).

Exemplo de Resposta:

{
   "message": "any message",
   "error_code": 1
}

Uso de Cache

Neste contexto, será utilizado o RFC IETF 7234, uma especificação amplamente reconhecida que estabelece as melhores práticas para o armazenamento em cache de chamadas HTTP.


Verbo HTTP

Neste contexto, é essencial alinhar a semântica de nossas chamadas com o protocolo HTTP, que sugere que apenas chamadas GET devem ser armazenadas em cache.


Headers

Devem ser incorporados cabeçalhos adicionais nas chamadas e respostas feitas aos integradores. No caso das chamadas, devem ser adicionados os seguintes cabeçalhos:


Atributo Descrição
If-None-Match Identificador do recurso (cotação) em questão (cabeçalho ETag). É usado para verificar se a versão do recurso ainda é válida. É válido se o parceiro retornar o status HTTP 304 sem conteúdo. Caso contrário, retorna uma nova versão do recurso e um novo ETag.


Por outro lado, nas respostas fornecidas pelos integradores, é necessário incluir os seguintes cabeçalhos adicionais:

Atributo Descrição
Cache-Control Utilizado para especificar as diretrizes para o cacheamento das respostas. As diretrizes que você deve adaptar são:
  • no-store: (opcional) no-store: (opcional) indica que a resposta não deve ser armazenada em cache. Se usar esta diretriz, as demais não são necessárias.
  • must-revalidate: must-revalidate: você deve verificar se a resposta é válida com o integrador. Este deve retornar o HTTP Status 304 se ainda for válido ou 200 com o novo valor para a cotação. Essa validação é opcional e fica a critério do integrador adotá-la ou não. Se não for adaptada, o max-age será utilizado para definir o TTL da resposta no cache.
  • private: (obligatorio) a resposta não deve ser armazenada por qualquer proxy intermediário.
  • max-age: (obligatorio) tempo máximo em segundos que a resposta é válida.
Age Tempo em segundos desde que a versão do recurso se tornou válida. Caso esse controle não exista por parte dos parceiros, você deve enviar o valor zero (0).
ETag Identificador da versão do recurso. É obrigatório usá-lo.


Buscando otimizar nossas respostas e reduzir o número de chamadas, o atributo chamado destinations conterá uma lista de destinos em formato de strings, indicando todos os lugares onde a cotação pode ser utilizada. Agora, com uma única cotação, é possível evitar várias chamadas, melhorando significativamente a eficiência de nossas APIs.
A seguir, apresentamos um exemplo de como verificar o cabeçalho ETag retornado para determinar se a resposta em cache ainda é válida. Exemplo de chamada com validação de cache:


Headers Estado Body
- Cache-Control:private;max-age:1000000
- Age:50000
- ETag:0943dc18-a8d7-4508-97a9-ba9221fa
304 No Content

Para proporcionar um controle mais granular sobre o armazenamento em cache, estamos introduzindo a diretriz no-store no cabeçalho Cache-Control de nossas respostas. Essa diretriz permite que os parceiros indiquem que uma cotação não deve ser armazenada em cache.


Exemplo de resposta sem permitir o cache:

Headers Estado Body
- Cache-Control:no-store 200 Body da resposta da cotação igual ao exemplo anterior.

Exemplo de resposta com cache:

Headers Estado Body
- Cache-Control:private;max-age:1000000
- Age:0
- ETag:0943dc18-a8d7-4508-97a9-ba9221fa
200 Body da resposta da cotação igual ao exemplo anterior.

Monitoreo de errores

A continuación, enumeramos los posibles errores en relación al manejo de Flete Dinâmico:

Parâmetro Descrição Possível Solução
-1 Este erro ocorre quando a aplicação do integrador enfrenta problemas internos que impedem seu funcionamento adequado. Como resultado, o comprador receberá uma cotação da calculadora MELI em modo de contingência. Em caso de um erro interno na aplicação do integrador, é recomendável considerar a Tabela de Contingência como um plano de backup. Quando um erro interno é detectado, a aplicação ativa automaticamente a consulta à Tabela de Contingência.
1 Este erro ocorre quando o produto selecionado pelo comprador não está disponível no estoque. Como resultado, não é possível calcular uma cotação de envio para um produto que não está em estoque. Recomenda-se implementar um processo eficaz de gestão de inventário ou considerar mostrar alternativas de produtos similares disponíveis.
2 Este erro ocorre quando o destino (código postal, comuna, etc.) fornecido pelo comprador não é válido. Como resultado, não é possível calcular uma cotação de envio precisa. Ao verificar que o destino é inválido, a aplicação deve consultar a Tabela de Contingência. Se a Tabela de Contingência contiver informações válidas para o destino inserido, essas informações devem ser utilizadas para calcular a cotação de envio.
3 Este erro ocorre quando o produto selecionado pelo comprador não está disponível para entrega no destino especificado. Como resultado, não é possível calcular uma cotação de envio. Se o produto não estiver disponível na localização original, a Tabela de Contingência pode conter informações sobre produtos alternativos ou locais de entrega alternativos.
4 Este erro ocorre quando a aplicação não consegue encontrar o produto especificado pelo comprador. Isso impede o cálculo de uma cotação de envio precisa. Certifique-se de que o banco de dados de produtos esteja atualizado e seja facilmente acessível para a aplicação.

Contingência do Mercado Livre

A Tabela de Contingência, também conhecida como Tabela Axado, é uma planilha de transportadoras que pode ser carregada diretamente do Mercado Livre. Sua função principal é atuar como um plano de backup caso o endpoint ou URL do integrador falhe. Em outras palavras, é uma ferramenta de segurança projetada para manter as operações dos vendedores em funcionamento mesmo quando surgem problemas inesperados.
A seguir, alguns critérios a serem considerados:

  • Requisito Inicial: o Consultor Comercial da MELI solicitará ao vendedor a Tabela de Contingência ao ativar a integração com o integrador de flete dinâmico.
  • Responsabilidade do Vendedor: o vendedor deve completar e manter atualizada esta tabela com os valores tanto no integrador quanto na MELI.
  • Estabelecer Regras de Frete: recomenda-se que o vendedor estabeleça regras claras de frete, como custos zero para locais próximos, para otimizar a entrega.
  • Atualização Fácil: se o vendedor desejar atualizar a tabela, pode fazê-lo a partir da MELI, acessando Meu Perfil -> Vendas -> Preferências de Vendas -> Transportadoras.

Além disso, anexamos um detalhamento por país juntamente com um link de referência para a Tabela de Contingência Modelo:

País Detalhe Link
Brasil Código Postal https://www.mercadolivre.com.br/transportadoras/config
Argentina Código Postal https://www.mercadolibre.com.ar/transportadoras/config
México Código Postal https://www.mercadolibre.com.mx/transportadoras/config
Chile Região / Comuna https://www.mercadolibre.cl/transportadoras/config
Colômbia Departamento / Localidade https://www.mercadolibre.com.co/transportadoras/config
Peru Departamento / Província ou Distrito https://www.mercadolibre.com.pe/transportadoras/config
Uruguai Departamento / Localidade https://www.mercadolibre.com.uy/transportadoras/config
Importante:
Para evitar erros ao carregar a Tabela de Contingência, é importante seguir estas recomendações:
  • Lembre-se que as transportadoras cadastradas no Mercado Livre seguem o esquema de código 16 para vendedores do Brasil e 17 para outros países, conforme estabelecido na Tabela de Contingência.
  • Verificar extensão do arquivo: certificar-se de que o arquivo tenha a extensão correta conforme o modelo do Mercado Livre.
  • Manter os nomes das planilhas: não modificar os nomes das planilhas no modelo a ser carregado. Tudo deve coincidir com o modelo original. Além disso, nenhuma planilha deve ser excluída.
  • Preservar os cabeçalhos: não alterar os cabeçalhos no arquivo. Verificar se a estrutura da planilha é mantida de acordo com o modelo.
  • Validar informações: verificar se os códigos postais estão corretos. Prestar atenção às maiúsculas e minúsculas ao se referir a departamentos, cidades, comunidades, etc.