Documentação do Mercado Livre
Confira todas as informações necessárias sobre as APIs Mercado Livre.
Documentação do
Gestão de mensagens
Este recurso permite gerenciar a comunicação entre vendedores e compradores no contexto pós-venda, incluindo o envio, consulta e gerenciamento de mensagens e anexos.
Nova arquitetura de mensageria
IDs dos Agentes por país
| Site | Agent User ID |
|---|---|
| MLC (Chile) | 3020819166 |
| MCO (Colômbia) | 3037204123 |
| MLM (México) | 3037204279 |
| MLA (Argentina) | 3037674934 |
| MLB (Brasil) | 3037675074 |
| MLU (Outros) | 3037204685 |
Considerações
- Os recursos de consulta (GET) compartilham um rate limit de 500 rpm, e os recursos de escrita (POST/PUT) também compartilham entre si um rate limit de 500 rpm.
- A regra de início de conversa permanece inalterada: o vendedor não pode iniciar uma conversa. O fluxo sempre deve ser iniciado pelo comprador.
Parâmetros
- message_id: ID de mensagem.
- date_created: Data de criação.
- date: Data em que a mensagem é salva.
- date_received: Data de recepção da mensagem.
- date_available: Data em que a mensagem passou por moderação.
- date_notified: Data em que a contraparte foi notificada da mensagem.
- date_read: Data em que a contraparte leu a mensagem.
- from: Quem envia a mensagem.
- to: Quem recebe a mensagem.
- user_id: ID do usuário (remetente ou destinatário).
- subject: Assunto do email.
- text: Texto da mensagem.
- plain: Texto plano da mensagem.
- attachments: Anexos.
- attachments_validations: Validações de anexos.
- invalid_size: Tamanho de anexo inválido.
- invalid_extension: Extensão de anexo inválida.
- internal_error: Erro interno.
- site_id: Site do Mercado Livre (MLA, MLB, etc.).
- message_resources: Contém uma lista com IDs relacionados à mensagem, descrevendo a que recurso cada um pertence.
- resource: Relativo à ordem a que pertence (orders).
- resource_id: ID da ordem.
- status: Status da mensagem (available - moderated - rejected - pending_translation).
- moderation_status: Status de moderação da mensagem.
- moderation.status: Resultado do processo de moderação (clean, rejected, pending, non_moderated).
- moderation.date_moderated: Data em que a informação de moderação impactou.
- moderation.source: Modalidade da moderação.
- moderation.reason: Motivo pelo qual a mensagem foi moderada. Valores possíveis: OUT_OF_PLACE_LANGUAGE, SOCIAL_NETWORK_LINK, LINK_SHORT_URL, AUTOMATIC_MESSAGE, PERSONAL_DATA, LINK_MERCADOPAGO, ML_LINKS_PAYPAL, EVASION_CLAIM_SELLER.
Obter mensagens de um pacote
Utilize o pack_id na chamada para obter as mensagens enviadas. Caso o pack_id seja null, você pode utilizar o order_id como padrão, mas mantendo a estrutura do endpoint (ou seja, ainda utilizando /packs). Considere que as mensagens enviadas pelos compradores, que forem moderadas, não estarão visíveis. Por outro lado, as mensagens do vendedor, ainda que moderadas, estarão visíveis.
Quando consultar o /messages/packs/pack_id/sellers/seller_id, as mensagens serão marcadas como lidas. Caso você não queira marcá-las como lidas, execute o GET com o parâmetro mark_as_read=false e a consulta será: /messages/packs/pack_id/sellers/seller_id?mark_as_read=false. Lembre-se de que o restante dos recursos não marcará as mensagens como lidas.
Chamada:
curl -X GET -H 'Authorization: Bearer $ACCESS_TOKEN' https://api.mercadolibre.com/messages/packs/$PACK_ID/sellers/$USER_ID?tag=post_sale
Exemplo:
curl -X GET -H 'Authorization: Bearer $ACCESS_TOKEN' https://api.mercadolibre.com/messages/packs/2000000089077943/sellers/415458330?limit=2&offset=1&tag=post_sale
Resposta:
{
"paging":{
"limit":10,
"offset":0,
"total":3
},
"conversation_status":{
"path": "/packs/2000000089077943/seller/415458330",
"status": "active",
"substatus": null,
"status_date": "2020-12-05T20:01:46.000Z",
"status_update_allowed": false,
"claim_id": null,
"shipping_id": null
},
"messages":[
{
"id":"fd1d2e37ad004ede9e0bf25d1215002d",
"site_id":"MLB",
"client_id":123456789,
"from":{
"user_id": 123456789000,
},
"to":{
"user_id": 2332423234,
},
"status":"available",
"subject":null,
"text":"Mensaje de test",
"message_date":{
"received":"2020-12-05T20:01:46.000Z",
"available":"2020-12-05T20:01:46.000Z",
"notified":"2020-12-05T20:01:46.000Z",
"created":"2020-12-05T20:01:46.000Z",
"read":null
},
"message_moderation":{
"status":"clean",
"reason":null,
"source":"online",
"moderation_date":"2020-12-05T20:01:46.000Z"
},
"message_attachments":null,
"message_resources":[
{
"id":"000011122344",
"name":"packs"
},
{
"id":"475684066",
"name":"sellers"
}
],
"conversation_first_message":false
}
],
"seller_max_message_length":350,
"buyer_max_message_length":3500
}
No final da resposta, você pode ver o número máximo de caracteres que o vendedor pode enviar (seller_max_message_length).
Obter os detalhes da mensagem por ID
Com este recurso você poderá obter as informações da mensagem enviada utilizando o ID retornado no recurso Obter mensagens de um pacote.
Chamada:
curl -X GET -H 'Authorization: Bearer $ACCESS_TOKEN' https://api.mercadolibre.com/messages/$MESSAGE_ID?tag=post_sale
Exemplo de resposta sem header:
{
"message_id": "0033b582a1474fa98c02d229abcec43c",
"date_received": "2016-09-01T05:15:25.821Z",
"date": "2016-09-01T05:15:25.821Z",
"date_available": "2016-09-01T05:15:25.821Z",
"date_notified": "2016-09-01T05:17:42.945Z",
"date_read": "2016-09-01T21:31:19.606Z",
"from": {
"user_id": 123456789
},
"to": {
"user_id": 123456780
},
"subject": "Test Item subject",
"text": {
"plain": "Exemplo de texto"
},
"attachments": [
{}
],
"attachments_validations": {
"invalid_size": [],
"invalid_extension": [],
"forbidden": [],
"internal_error": []
},
"site_id": "MLB",
"resource": "orders",
"resource_id": "1234567871",
"status": "available",
"moderation": {
"status": "clean",
"date_moderated": "2019-03-13T09:34:26.450-04:00",
"source": "online"
}
}
Exemplo de resposta atualizada (com header):
{
"paging": null,
"conversation_status": null,
"messages": [{
"id": "fd1d2e37ad004ede9e0bf25d1215002d",
"site_id": "MLB",
"client_id": 123456789,
"from": {
"user_id": 123456789000
},
"to": {
"user_id": 2332423234
},
"status": "available",
"subject": null,
"text": "Mensagem de teste",
"message_date": {
"received": "2020-12-05T20:01:46.000Z",
"available": "2020-12-05T20:01:46.000Z",
"notified": "2020-12-05T20:01:46.000Z",
"created": "2020-12-05T20:01:46.000Z",
"read": null
},
"message_moderation": {
"status": "clean",
"reason": null,
"source": "online",
"moderation_date": "2020-12-05T20:01:46.000Z"
},
"message_attachments": null,
"message_resources": [{
"id": "000011122344",
"name": "packs"
},
{
"id": "475684066",
"name": "sellers"
}
],
"conversation_first_message": false
}]
}
Enviar mensagem para o comprador
Utilize este recurso para criar uma mensagem a ser enviada ao comprador. Há um limite de 350 caracteres. Aceitamos os caracteres da norma ISO-8859-1 latin1 e os emoticons dessa listagem.
Considere que a partir de 02/02/2026 estaremos dando início à migração para nova arquitetura de mensageria. Com isso, para MLB e MLC, ao criar a mensagem a ser enviada ao comprador lembre-se de que o campo "to": { "user_id" } deverá conter o ID do Agente do país correspondente. Consulte a tabela de IDs dos Agentes.
| Site | Agent User ID |
|---|---|
| MLC (Chile) | 3020819166 |
| MCO (Colômbia) | 3037204123 |
| MLM (México) | 3037204279 |
| MLA (Argentina) | 3037674934 |
| MLB (Brasil) | 3037675074 |
| MLU (Outros) | 3037204685 |
O atributo attachments se obtém da resposta do POST de attachments. Veja como Carregar e salvar um anexo. Se não for preciso anexar um arquivo, a seção "attachments" deve ser removida do JSON. Caso necessite inserir um link clicável no texto, pode inserir usando a função href, por exemplo: <a href="sua_url">Seu link de rastreio</a>.
Importante: os anexos devem ser associados a uma mensagem dentro de 2 dias (48 horas) após o seu carregamento; caso contrário, serão eliminados e o envio falhará. Nesse caso, carregue o arquivo novamente para obter uma nova key (ID do anexo).
Chamada:
curl -X POST -H 'Authorization: Bearer $ACCESS_TOKEN' https://api.mercadolibre.com/messages/packs/$PACK_ID/sellers/$USER_ID?tag=post_sale
Exemplo:
curl -X POST -H 'Authorization: Bearer $ACCESS_TOKEN' https://api.mercadolibre.com/messages/packs/2000000089077943/sellers/415458330?tag=post_sale \
-H 'Content-Type: application/json' \
-d '{
"from": {
"user_id": "415458330"
},
"to": {
"user_id": "3037675074"
},
"text": "Olá! Sua encomenda foi despachada.",
"attachments": ["415460047_a96d8dea-38cd-4402-938e-80a1c134fc5d.pdf"]
}'
Erro possível:
{
"status_code": 403,
"code": "forbidden",
"message": "blocked_conversation_send_message_forbidden"
}
Carregar e salvar um anexo
Para anexar um arquivo na mensagem, ele deverá ser salvo previamente. A resposta retornará o ID do anexo. O POST deve ser realizado como form-data com key: value → file = referência ao arquivo. O arquivo deve ter um tamanho máximo de 25 MB. Formatos aceitos: JPG, PNG, PDF e TXT.
Chamada:
curl -X POST -H 'Authorization: Bearer $ACCESS_TOKEN' https://api.mercadolibre.com/messages/attachments?tag=post_sale&site_id=SITE_ID
Exemplo:
curl -X POST \
'https://api.mercadolibre.com/messages/attachments?tag=post_sale&site_id=MLB' \
-H 'Authorization: Bearer $ACCESS_TOKEN' \
-H 'Content-Type: multipart/form-data' \
-F 'file=@/home/user/Anexo.jpg'
Neste caso, o servidor responderá com um JSON contendo o ID do arquivo, caso a requisição tenha sido bem-sucedida. A resposta obtida deverá ser anexada na mensagem desejada.
Resposta:
{
"id": "210438685_59f0f034-db1b-4ea6-8c5e-1d34e2092482.jpg"
}
Vencimento de anexos não atribuídos (TTL de primeira relação):
Todo anexo enviado que não seja atribuído a uma mensagem dentro de 2 dias (48 h) será eliminado automaticamente. Essa limpeza afeta unicamente anexos "órfãos" (sem relação com nenhuma mensagem).
- Início da contagem: a partir da confirmação de envio (resposta bem-sucedida do upload).
- Alcance: aplica-se até a primeira associação do anexo a uma mensagem. Uma vez associado pela primeira vez, o anexo deixa de estar sujeito a esse TTL.
- Efeito: a eliminação é irreversível. Tentativas de usar a key de um anexo eliminado falharão.
- Recomendação: envie o anexo o mais próximo possível do envio e associe a key imediatamente.
- Recuperação: se o anexo foi eliminado, envie o arquivo novamente para obter uma nova key e use-a na mensagem.
Obtenha os anexos enviados
Para obter os detalhes sobre o(s) anexo(s) previamente carregados, realize:
Chamada:
curl -X GET -H 'Authorization: Bearer $ACCESS_TOKEN' https://api.mercadolibre.com/messages/attachments/$ATTACHMENT_ID?tag=post_sale&site_id=SITE_ID
Exemplo:
curl -X GET -H 'Authorization: Bearer $ACCESS_TOKEN' https://api.mercadolibre.com/messages/attachments/76601286_5946e4c4-168a-45fd-945e-b8f0c306c58d.png?tag=post_sale&site_id=MLB
Se o request for bem-sucedido, a chamada retornará o arquivo solicitado.
Erros
A seguir estão listados os possíveis erros que podem ocorrer ao utilizar os recursos de mensageria.
Obter mensagens de um pacote
| Status | Erro | Mensagem |
|---|---|---|
| 403 | User access token invalid for resource {resource_id} | Usuário sem acesso à ordem |
| 400 | The limit param must be greater than 0 | O param "limit" do request deve ser maior que 0 |
| 400 | Invalid offset param | Param "offset" inválido |
| 400 | Invalid limit param | Param "limit" inválido |
Obter mensagens por ID
| Status | Erro | Mensagem |
|---|---|---|
| 403 | Access denied for user 30265782 to message with id 006b9b2df38f452b80402041ae86f6d4 | Usuário sem acesso a uma determinada mensagem |
| 400 | The specified message id does not exists | A mensagem solicitada não existe |
| 404 | The message with id: a could not be retrieved from storage | Mensagem não encontrada no servidor. Tente novamente em alguns segundos |
Enviar mensagem para o comprador
| Status | Erro | Mensagem |
|---|---|---|
| 400 | The text has character/s that is/are not supported. | Caractere não suportado (ex: UTF-8) |
| 400 | The message content is too long, max characters allowed are 350 | A mensagem excede o limite de 350 caracteres |
| 403 | You can not send the message because a mediation is in process | Mensagem bloqueada por mediação em andamento (apenas Brasil) |
| 403 | You can not send the message because the purchase is Mercado Envíos Full and has not been yet delivered | Envio gerenciado pelo Fulfillment ainda não entregue |
| 403 | Access denied for user {from.user_id} to order {to.resource_id} | O usuário "from" não tem acesso ao pedido |
| 403 | Receiver does not belong to order {to.resource_id} | O destinatário da mensagem não pertence ao pedido |
| 400 | The field 'to.user_id' is required | Mensagem sem receptor (é necessário adicionar "to") |
| 400 | Invalid 'to' user id | User id "to" inválido |
| 400 | Sender and received must not be equals | O user "from" e "to" são iguais |
| 400 | The field 'to.email' must be a secure email | Se o user_id for 0 e o e-mail não for um secure_email |
| 400 | The field 'to.resource' is required | O atributo "resource" não pode ser encontrado |
| 400 | Invalid field 'to.resource' | Atributo resource inválido |
| 400 | The field 'to.site_id' is required | Request sem site_id |
| 400 | The field 'to.site_id' has an invalid value | Atributo site_id inválido |
| 400 | A JSON body is required | POST sem JSON body |
| 400 | The field 'from' is required | Mensagem sem 'from' |
| 400 | Access token is required | Request sem access token |
| 400 | Application id is required | Access token sem application_id |
| 422 | Attachment key is invalid or not found | O ID do attachment não existe, não é acessível ou não pertence ao usuário. |
Carregar e salvar anexo
| Status | Erro | Mensagem |
|---|---|---|
| 500 | File can not be saved, try it later | Problemas ao armazenar o arquivo |
| 400 | File attached is empty | Anexo vazio ou nulo |
| 400 | File name cannot include characters like /, \ | O nome do arquivo não pode conter caracteres como /, \ |
| 400 | File attachment is bigger than 25 Mb. | O tamanho do arquivo excede 25 MB |
| 400 | The message exceeds the allowed number of attachments: 25 | A mensagem excede o número permitido de anexos: 25 |
| 400 | The queryparam 'site_id' is required | Request sem o site_id |
| 400 | The original_filename exceeded 200 character limit | O nome do arquivo excede o limite de 200 caracteres |
Obter anexo
| Status | Erro | Mensagem |
|---|---|---|
| 400 | Invalid site_id: 'XYZ' is not a recognized site | site_id inválido |
| 500 | File can not be saved, try it later | Não foi possível obter o arquivo solicitado |
Próximo: Mensagens pendentes.