Gerencie vendas

Uma ordem é um pedido realizado por um cliente para um anúncio com a intenção de comprar conforme uma série de condições que ele irá escolher no fluxo do processo de compra online (checkout).
Estas condições são detalhadas na ordem, que será replicada nas contas do comprador e do vendedor. A ordem contém grande quantidade de informações a serem preenchidas sobre o produto, bem como a possibilidade de reservar e/ou descontar estoque.

Assuntos:

Receba uma ordem

Quando uma nova ordem é criada no usuário, os detalhes podem ser consultados através de uma solicitação ao recurso de ordens:
Exemplo:

curl https://api.mercadolibre.com/orders/$ORDER_ID?access_token=$ACCESS_TOKEN

Resposta:

{
  "id": 768570754,
  "status": "paid",
  "status_detail": null,
  "date_created": "2013-05-27T10:01:50.000-04:00",
  "date_closed": "2013-05-27T10:04:07.000-04:00",
  "order_items": - [
	- {
  	"item": - {
    	"id": "MLB12345678",
  	  "title": "Samsung Galaxy",
    	"variation_id": null,
    	"variation_attributes": [
    	],
  	},
  	"quantity": 1,
  	"unit_price": 499,
  	"currency_id": "BRL",
	},
  ],
  "total_amount": 499,
  "currency_id": "BRL",
  "buyer": - {
	"id": "123456789",
	"nickname": "COMPRADORTESTE",
	"email": "b@b.com",
	"phone": - {
  	"area_code": "11",
  	"number": "12345678",
  	"extension": null,
	},
	"first_name": "Comprador de testes",
	"last_name": "da Silva",
	"billing_info": - {
  	"doc_type": "CPF",
  	"doc_number": "12345678910",
	},
  },
  "seller": - {
	"id": "123456789",
	"nickname": "VENDEDORTESTES",
	"email": "a@a.com",
	"phone": - {
  	"area_code": null,
  	"number": "11 12345678",
  	"extension": "11",
	},
	"first_name": "Vendedor de Testes",
	"last_name": "testes de documentacao",
  },
  "payments": - [
	- {
  	"id": "596707837",
  	"transaction_amount": 499,
  	"currency_id": "BRL",
  	"status": "approved",
  	"date_created": null,
  	"date_last_modified": null,
	},
  ],
  "feedback": - {
	"purchase": null,
	"sale": null,
  },
  "shipping": - {
	"id": 20676482441,
	"shipment_type": "shipping",
	"status": "handling",
    "date_created": "2013-05-27T10:03:28.000-04:00",
	"receiver_address": - {
  	"id": 12345678,
  	"address_line": "Rua dos testes 123  ",
  	"zip_code": "01001000",
  	"city": - {
    	"id": "BR-SP-44",
    	"name": "São Paulo",
  	},
  	"state": - {
    	"id": "BR-SP",
    	"name": "São Paulo",
  	},
  	"country": - {
    	"id": "BR",
    	"name": "Brasil",
  	},
  	"latitude": null,
  	"longitude": null,
  	"comment": null,
	},
	"currency_id": "BRL",
	"cost": 0,
  },
  "tags": - [
	"paid",
	"not_delivered",
  ],
}

Há grande número de atributos conforme a ordem. A seguir, vamos ver uma descrição dos campos mais importantes.
id Identificador único da ordem.
date_created Data de criação da ordem.
date_closed Data de confirmação da ordem. Quando uma ordem muda pela primeira vez de status é definida como: confirmed / paid e descontada do estoque do item.
expiration_date Prazo limite para o usuário qualificar; após essa data, o feedback se torna visível, os pagamentos são emitidos (caso houver) e os encargos são criados.
status Status da ordem. Ver os valores possíveis.
status_detail Detalhe do status, caso a ordem seja cancelada.
code Código do status.
description Descrição do status.
comprador Informações do comprador.
vendedor Informações do vendedor.
order_items Publicações na ordem.
payments Pagamentos relacionados à ordem.
feedback Informações de feedback relacionadas à ordem.
shipping Configuração do envio para esta ordem.
total_amount Valor total da ordem.
currency_id ID de moeda.
tags Lista das tags selecionadas pelo vendedor, como entregue, pago.
Nota: Da mesma maneira que cada vez que a informação de uma ordem é atualizada, se descobrirmos que a compra foi fraudulenta, marcaremos a ordem com a tag “fraud_risk_detected” e enviaremos uma notificação para você com o topic “orders” e a ID da ordem.

O que acontecerá com a venda segundo seu envio?

Sem Mercado Envios: O vendedor será informado via email ou telefonicamente.

  • Caso o produto tenha sido entregue e exista prova disso, o vendedor fica protegido perante um contra-encargo. Isso significa que o dinheiro da venda não lhe será descontado.
  • Se o produto ainda não foi entregue, o vendedor deverá fazer o refund do dinheiro.
  • Para saber como fazer um refund via API confira a documentação relacionada.
  • Se quiser mais informações, sugerimos a leitura da documentação de “Requisitos do Programa de Proteção ao Vendedor”.

Com Mercado Envios: Caso a etiqueta ainda não tenha sido impressa, a venda será cancelada e uma notificação será enviada ao vendedor. Além disso, se o produto já foi enviado, Mercado Livre entrará em contato com a empresa de envios para este ser retornado.

Pesquisa de ordens

O recurso de pesquisa de ordens vai ajudá-lo a pesquisar cada ordem de usuários com token válido.

https://api.mercadolibre.com/orders/search?buyer=buyer_id&access_token={...}

No seach a orders, os campos “available_filters” e “available_sorts” estão disponíveis.
Lembre que o search não mostra as ordens em estado Payment_required.

Como filtrar?

Por exemplo, para filtrar suas ordens com status “paid”, você encontrará entre os ”available_filters” disponíveis o ID “order.status” e dentro dele o value com ID “paid”.

https://api.mercadolibre.com/orders/search?seller=seller_id&order.status=paid&access_token={...}

Para filtrar suas ordens por data, você deverá fazer o seguinte:

https://api.mercadolibre.com/orders/search?seller=&order.date_created.from=2015-07-01T00:00:00.000-00:00&order.date_created.to=2015-07-31T00:00:00.000-00:00&access_token=

Nota: leve em conta que para filtrar por data somente se utiliza até a hora.
Informação de minutos, segundos e milissegundos é descartada.

Como realizar uma ordem?

Neste caso, você deve adicionar “sort” com o ID disponível da ordem que quiser aplicar, por exemplo: “date_desc”

https://api.mercadolibre.com/orders/search?seller={seller_id}&order.status=paid&sort=date_desc&access_token={...}

Nota: Por default, uma ordem date_asc já vem aplicada. A data segundo a qual é organizada é:

  • Sellers por date_closed.
  • Buyers por date_created.

Ordens recentes

As ordens recentes são os geradas mais recentemente para um usuário. A resposta incluirá ordens nas quais a data atual for anterior à expiration_date e ainda não tenham sido qualificadas por nenhuma das partes.
Pesquisa de ordens recentes de um vendedor:

https://api.mercadolibre.com/orders/search/recent?seller=seller_id&access_token={...}

Pesquisa de ordens recentes de um comprador:

https://api.mercadolibre.com/orders/search/recent?buyer=buyer_id&access_token={...}

Ordens arquivadas

Se você procurar uma ordem com expiration_date posterior à data atual ou que foi qualificada por ambas as partes, pode utilizar o recurso de pesquisa em ordens arquivadas:
Pesquisa de ordens arquivadas de um vendedor:

https://api.mercadolibre.com/orders/search/archived?seller=seller_id&access_token={...}

Pesquisa de ordens arquivadas de um comprador:

https://api.mercadolibre.com/orders/search/archived?buyer=buyer_id&access_token={...}

Ordens Pendentes

Esta pesquisa recuperará todos as ordens em status “pendente” e omitirá as canceladas automaticamente.
Se você quiser ver as ordens de um vendedor, envie o seller_id:

https://api.mercadolibre.com/orders/search/pending?seller=seller_id&access_token={...}

Para pesquisar por comprador, substitua os parâmetros como é mostrado a seguir:

https://api.mercadolibre.com/orders/search/pending?buyer=user_id&access_token={...}

Status da ordem

Os status da ordem são:
confirmed
Status inicial de uma ordem; ainda sem ter sido paga.
payment_required
O pagamento da ordem deve ter sido confirmado para exibir as informações do usuário.
payment_in_process
Há um pagamento relacionado à ordem, mais ainda não foi creditado.
partially_paid
A ordem tem um pagamento associado creditado, porém, insuficiente.
paid
A ordem tem um pagamento associado creditado.
cancelled
Por alguma razão, a ordem não foi completada.*
invalid
A ordem foi invalidada por vir de um comprador malicioso.

*Nota:Uma ordem pode ser cancelada pelos seguintes motivos:

  • Requeria aprovação do pagamento para descontar do estoque, mas, no tempo de processo de aprovação, o item foi pausado/finalizado por falta de estoque, portanto, o pagamento é retornado ao comprador.
  • Requeria pagamento, mas, após certo tempo, não foi paga, por isso é automaticamente cancelada.
  • Após uma transação ter sido efetuada, o vendedor é proibido no site por alguma razão.
  • Se por alguma razão o vendedor qualificar a operação como não concretizada, a ordem assume o “status = confirmed”. Caso exista um pagamento aprovado, este será automaticamente devolvido.

    Lembre que uma ordem não concretizada pelo vendedor será visualizada como “Cancelada” por front e por api terá “status = confirmed”.

Fluxo de Mercado Pago obrigatório (somente para países com MP)

Como saber se um site tem Mercado Pago ativo?
Para obter essa informação, você deve realizar a seguinte chamada:

curl https://api.mercadolibre.com/sites/MLA

Caso você obtenha “MLAMP” como resposta dentro dos “payment_method_ids”, poderá trabalhar sem problemas com este fluxo.

Aclaração: MLAMP é o ID do método de pagamento Mercado Pago:

curl https://api.mercadolibre.com/payment_methods/MLAMP

Dentro da nossa plataforma, você vai encontrar ordens que podem entrar pelo fluxo obrigatório de Mercado Pago como único meio de pagamento e outras que não.
Os cenários apresentados a seguir são aqueles em que você pode encontrar esta opção de maneira obrigatória:

  • Todos as ordens de MLB.
  • Todos as ordens de MLA e MLM por venda de produtos com “condition”: “new”.
  • Anúncios de Lojas Oficiais em todos os países com Mercado Pago.
  • Categorias com Mercado Pago como única opção (Mais informações em: Categorias com pagamento imediato).
  • Usuário automaticamente marcado para que suas operações vão por este fluxo, com a marca “immediate_payment” na API de users.
  • Vendedor “auto” marcado para que suas vendas vão por este fluxo.

  • Agora vamos explicar como é o funcionamento geral das ordens, estejam elas dentro deste fluxo ou não:
    1) Ordens dentro deste fluxo são criadas em status “payment_required”.
    Nesse momento, têm as seguintes características:

    • Não são visíveis para o seller.
    • O estoque não é descontado do item.
    • Não têm o campo date_closed estabelecido.
    • Não têm dados da contraparte.
    • Somente é enviada a notificação do topic “create_orders”.

    Quando o pagamento é creditado pelo valor total da venda, a ordem passa do status “payment_required” para “paid”. Nesse momento:

    • Passam a ser visíveis para o seller.
    • O item é descontado do estoque.
    • O campo date_closed é estabelecido.
    • São adicionados os dados da contraparte.
    • Também começam a ser enviadas as notificações do topic “orders”.


    2) Ordens que NÃO estão dentro deste fluxo são criadas em status “confirmed”. A partir desse momento:

    • São visíveis para o seller.
    • O item é descontado do estoque.
    • O campo date_closed é estabelecido.
    • Contêm os dados da contraparte.
    • Também começam a ser enviadas as notificações do topic “orders”/”created_orders”.

    Caso seja efetuado um pagamento através de Mercado Pago e seja creditado pelo valor total de venda, a ordem passa do estado “confirmed” para “paid”.

    Aclaração: Em ambos os casos, se durante o fluxo de pagamento o comprador escolher Mercado Envios (ME2, somente em países onde este serviço estiver ativo), o envio terá a etiqueta disponível para impressão após a ordem ter passado para “paid”. Mais informações.

    Como seu app sabe de uma compra?

    A criação de uma ordem é um evento que se produz do lado do Mercado Livre, portanto, você deverá se cadastrar no nosso fedd de orders para saber em tempo real quando esse evento ocorre.
    Vá para o nosso Gerenciador de Aplicativos e edite as Configurações de Notificações de seu aplicativo. Mais informações sobre criar e configurar um novo aplicativo neste link.
    Você deve selecionar um Callback URL: configure a URL pública do domínio onde você quiser receber todas as notificações do Mercado Livre. Por exemplo: “https://backend.soleorigami.com/notification”.

    ORDERS

    Esta configuração permite que você interaja com as notificações do Mercado Livre. Todos os eventos (como pagamento e envio) relacionados a uma ordem serão notificados a seu callback URL.

    Receber Notificação

    Mercado Livre vai enviar notificações através de uma mensagem POST contendo informações. O atributo mais importante da mensagem é o user_id, relacionado à notificação; o segundo em importância é o recurso. O recurso é o elemento atualizado ou criado.

    {
      "user_id": 1234,
      "resource": "/orders/731867397",
      "topic": "orders",
      "received": "2011-10-19T16:38:34.425Z",
      "application_id" : 14529
      "sent" : "2011-10-19T16:40:34.425Z",
      "attempts" : 0
    }

    Após receber a notificação, você deve enviar um aviso de recepção [acknowledgment] (ACK 200) para Mercado Livre a fim de não receber mais notificações.

    Pagamentos

    Mercado Pago é a plataforma de pagamentos de Mercado Livre. Se você quiser integrar uma solução de pagamentos em sua plataforma, deve consultar o site de desenvolvedores de Mercado Pago.

    Cenário de múltiplos pagamentos

    Em alguns casos, quando o pagamento é rejeitado porque o cartão de crédito atinge o limite, permitimos que os usuários adicionem outro pagamento com um segundo cartão de crédito.

    Como posso saber se existem dois pagamentos?

    Quando você faz uma solicitação GET para a API de pedidos, poderá ver que dentro do conjunto de pagamentos existem dois ID com os detalhes de cada pagamento.
    Exemplo:

    curl -X GET https://api.mercadolibre.com/orders/893431118?access_token=&ACCESS_TOKEN

    Resposta

    {
    	"buyer": {
        	"alternative_phone": {
            	"area_code": null,
            	"extension": null,
            	"number": ""
        	},
        	"billing_info": {
            	"doc_number": "67045427794",
            	"doc_type": "CPF"
        	},
        	"email": "test_user_21963158@testuser.com",
        	"first_name": "Test",
        	"id": 160903317,
        	"last_name": "Test",
        	"nickname": "TETE2022123",
        	"phone": {
            	"area_code": "01",
            	"extension": null,
            	"number": "1111-1111"
        	}
    	},
    	"coupon": {
        	"amount": 0,
        	"id": null
        },
    	"currency_id": "BRL",
    	"date_closed": null,
    	"date_created": "2014-10-26T22:46:18.000-04:00",
    	"feedback": {
        	"purchase": null,
        	"sale": null
    	},
    	"id": 893431118,
    	"last_updated": "2014-10-26T22:50:10.000-04:00",
        "mediations": [],
    	"order_items": [
        	{
            	"currency_id": "BRL",
            	"item": {
                	"id": "MLB600034093",
                	"title": "Item De Testeo, Por Favor No Ofertar --kc:off",
                	"variation_attributes": [],
                	"variation_id": null
            	},
            	"quantity": 1,
            	"unit_price": 591
        	}
    	],
    	"paid_amount": 591,
    	"payments": [
        	{
            	"activation_uri": null,
            	"atm_transfer_reference": {
                	"company_id": null,
                    "transaction_id": null
            	},
                "available_actions": [],
            	"card_id": null,
            	"collector": {
                	"id": 169648308
            	},
            	"coupon_amount": 0,
            	"coupon_id": null,
            	"currency_id": "BRL",
            	"date_created": "2014-10-26T22:48:46.000-04:00",
                "date_last_modified": "2014-10-27T00:51:53.000-04:00",
            	"id": 885920310,
            	"installments": 1,
            	"issuer_id": "25",
            	"operation_type": "regular_payment",
            	"order_id": 893431118,
            	"overpaid_amount": 0,
            	"payer_id": 160903317,
                "payment_method_id": "visa",
            	"payment_type": "credit_card",
            	"reason": "Item De Testeo, Por Favor No Ofertar --kc:off",
            	"shipping_cost": 0,
            	"site_id": "MLB",
            	"status": "approved",
            	"status_code": null,
            	"status_detail": "accredited",
                "total_paid_amount": 296,
                "transaction_amount": 296
        	},
        	{
            	"activation_uri": null,
                "atm_transfer_reference": {
                	"company_id": null,
                    "transaction_id": null
            	},
                "available_actions": [],
            	"card_id": null,
            	"collector": {
                	"id": 169648308
            	},
            	"coupon_amount": 0,
            	"coupon_id": null,
            	"currency_id": "BRL",
    	        "date_created": "2014-10-26T22:50:10.000-04:00",
                "date_last_modified": "2014-10-26T22:50:21.000-04:00",
            	"id": 885920410,
            	"installments": 3,
            	"issuer_id": "25",
            	"operation_type": "regular_payment",
            	"order_id": 893431118,
            	"overpaid_amount": 0,
            	"payer_id": 160903317,
                "payment_method_id": "visa",
            	"payment_type": "credit_card",
            	"reason": "Item De Testeo, Por Favor No Ofertar --kc:off",
            	"shipping_cost": 0,
            	"site_id": "MLB",
            	"status": "approved",
            	"status_code": null,
            	"status_detail": "accredited",
                "total_paid_amount": 315.62,
                "transaction_amount": 295
        	}
    	],
    	"seller": {
        	"alternative_phone": {
            	"area_code": null,
            	"extension": null,
            	"number": ""
        	},
        	"email": "test_user_70385259@testuser.com",
        	"first_name": "Test",
      	  "id": 169648308,
        	"last_name": "Test",
        	"nickname": "TETE6072468",
        	"phone": {
            	"area_code": "01",
            	"extension": null,
            	"number": "1111-1111"
        	}
    	},
    	"shipping": {
        	"status": "to_be_agreed"
    	},
    	"status": "paid",
    	"status_detail": null,
    	"tags": [
        	"not_delivered",
        	"paid"
    	],
    	"total_amount": 591,
        "total_amount_with_shipping": 591
    }

    Como obter informação de um pagamento?

    Para obter informação do pagamento de um comprador utilizando o token, deverá utilizar o recurso “payments”.

    Exemplo:

    https://api.mercadolibre.com/payments?access_token=

    Como obter informação do pagamento como vendedor?

    Para obter informação do pagamento desde o rol vendedor, o recurso que deverá utilizar com o payment_id é “collections”.

    Exemplo:

    https://api.mercadolibre.com/collections/{collection_id}?access_token=

    Avanzado

    Notas de ordens

    Uma nota é uma anotação que os vendedores podem adicionar às ordens. As notas podem ter até 300 caracteres e, após terem sido publicadas, é possível alterá-las ou eliminá-las.

    Como adicionar uma nota a uma ordem

    curl -X POST -H "Content-Type: application/json" -d '{  	
       	"note": "test",
    }' https://api.mercadolibre.com/orders/{order_Id}/notes?access_token=$ACCESS_TOKEN

    Visualize notas de ordens

    curl -X GET https://api.mercadolibre.com/orders/{order_Id}/notes?access_token=$ACCESS_TOKEN

    Como alterar uma nota

    curl -X PUT -H "Content-Type: application/json" -d '{
       	"note": "test2",
    }' https://api.mercadolibre.com/orders/{order_Id}/notes/{note_Id}?access_token=$ACCESS_TOKEN

    Elimine notas

    curl -X DELETE https://api.mercadolibre.com/orders/{order_Id}/notes/{note_Id}?access_token=$ACCESS_TOKEN

    Bloquear ofertas

    Embora estejam disponíveis uma prestação e fluxos de prevenção de fraude para manter a segurança de compradores e vendedores, em alguns casos, você pode encontrar usuários que, por algum motivo, ofertam nos anúncios. Estes casos podem ser enviados para a lista negra, a fim de evitar que voltem a ofertar.

    Como bloqueio ofertas de um usuário específico?

    Faça uma solicitação POST com o cust_id do usuário que você quer bloquear no JSON e o seu na url, como no exemplo a seguir:

    curl -X POST -H "Content-Type: application/json" -d
    { user_id: {cust_id} }
    https://api.mercadolibre.com/users/{cust_Id}/order_blacklist?access_token=$ACCESS_TOKEN

    Consulte sua lista negra

    Se você quiser saber quais são os usuários de sua lista negra, faça uma solicitação GET para a API com seu cust_id na url:

    curl -X GET https://api.mercadolibre.com/users/{cust_id}/order_blacklist?access_token=$ACCESS_TOKEN

    Elimine um usuário de sua lista negra

    Se você não quer continuar bloqueando um usuário para ele fazer ofertas, pode eliminá-lo de sua lista negra realizando uma solicitação DELETE para a API com seu cust_id e o cust_id do usuário.

    curl -X DELETE https://api.mercadolibre.com/users/{your_cust_id}/order_blacklist/{cust_id}

    Referência de códigos de erro

    Error_code Mensagem de erro Descrição Possível solução
    order_not_found Pedido não encontrado. $order_id incorreto. O pedido não foi encontrado; verifique se o order_id é o correto.
    empty_order_id O ID do pedido deve ser preenchido, ele não pode ficar incompleto. $order_id nulo. O parâmetro order_id não pode ser nulo; consulte a URL utilizada.
    invalid_order_id ID do pedido inválido. $order_id incorreto. O parâmetro order_id deve ser um número inteiro. (Para buscar seus pedidos, consulte esse assunto)
    not_identified_user Usuário não identificado Usuário não identificado. Enviar seu token.
    not_owned_order O usuário não pode acessar ao pedido. $seller ou $buyer incorreto. Para visualizar um pedido, seu token de acesso deve ser gerado a partir do vendedor ou do comprador.
    caller.id.invalid O caller_id não corresponde ao do comprador nem ao do vendedor. $seller ou $buyer incorreto. Para visualizar um pedido, você deve utilizar um ID de vendedor ou comprador.
    feedback_not_found O feedback não existe. Erro de resposta. Verifique se existe feeedback para dar uma resposta.
    invalid_fulfilled O parâmetro “concluído”deve ser verdadeiro ou falso. Erro ao enviar feedback. Consulte o parâmetro $fulfilled; ele deve ser booleano (elimine as aspas) e verifique se o parâmetro $reason não é nulo, em caso de $fulfilled: falso.
    reply_time_expired Tempo de resposta expirado. Há um período de 14 dias para responder ao feedback. Erro ao dar resposta sobre o feedback. A resposta pode ser enviada durante os 14 dias posteriores à data do feedback.
    reply_already_exists Já existe resposta para o feedback. Erro ao dar resposta sobre o feedback. O feedback só aceita uma resposta.



    Próximo:
    API do sistema de mensagens.

    Please rate this