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/07/2026

Pharma - Medicamentos com Receita

Esta documentação cobre os endpoints disponíveis para a gestão de receitas médicas em pedidos Pharma do Mercado Livre.


Para vender medicamentos que requerem validação de receita médica, o Mercado Livre solicitará que o comprador anexe a receita antes de finalizar a compra, e que o vendedor a valide antes de imprimir a etiqueta e despachar o pedido. A validação é uma etapa obrigatória para o vendedor, que poderá aceitar a receita e seguir com o pedido, ou recusá-la indicando um motivo. Em caso de recusa, o pedido será cancelado sem impacto na reputação do vendedor. Por fim, é responsabilidade do vendedor baixar e armazenar as receitas em seus sistemas para controle próprio. O Mercado Livre exclui as receitas aprovadas após 2 meses, após esse prazo os arquivos não estarão mais disponíveis para download.


Fluxo de validação de receitas em pedidos Pharma

O fluxo de validação de receitas segue três etapas:

  1. Identificar os pedidos de pharma a partir de notificações de pedidos.
  2. Verificar, mediante a API de items, se o item do pedido requer receita médica.
  3. Continuar com a validação das receitas por meio dos endpoints descritos nas próximas seções.

Identificar pedidos Pharma

Filtre os pedidos recebidos no tópico de orders por meio das notificações para identificar os pedidos do tipo Pharma.


Identificação atual

Um pedido é considerado Pharma quando possui static_tags com o valor "pharma".


Próxima atualização

Há uma migração em andamento: nos próximos meses deixaremos de utilizar static_tags = "pharma" e a identificação de pedidos Pharma passará a ser realizada apenas por meio de flow.pharma.

Importante:
Recomendação durante a migração: considere o pedido como Pharma se em static_tags"pharma" OU em flows"pharma".

Comparação entre a estrutura atual e a nova:

Estrutura atual Nova estrutura
{
  "id": 000000,
  "status": "paid",
  "tags": ["d2c", "pack_order", "catalog",
    "pharma", "paid", "delivered"],
  "static_tags": ["pharma"],
  "context": {
    "channel": "marketplace",
    "site": "MLB",
    "flows": ["catalog"]
  },
  "order_items": [{
    "item": { "id": "MLB3659122650",
      "title": "Cutaclin Gel 1 %" },
    "quantity": 1
  }]
}
{
  "id": 000000,
  "status": "paid",
  "tags": ["d2c", "pack_order", "catalog",
    "paid", "delivered"],
  "static_tags": [],
  "context": {
    "channel": "marketplace",
    "site": "MLB",
    "flows": ["catalog", "pharma"]
  },
  "order_items": [{
    "item": { "id": "MLB3659122650",
      "title": "Cutaclin Gel 1 %" },
    "quantity": 1
  }]
}

Verificar se o item requer receita médica

Para cada pedido Pharma, consulte a API de items correspondente ao item do pedido. Dentro do array attributes do payload, busque o atributo com id "IS_ELIGIBLE_FOR_PRESCRIPTION". O item requer receita médica quando este atributo estiver presente com value_id igual a "242085" (value_name = "Sim").

Exemplo do atributo relevante no payload de /items:

"attributes": [
  {
    "id": "IS_ELIGIBLE_FOR_PRESCRIPTION",
    "name": "É elegível para receita",
    "value_id": "242085",
    "value_name": "Sim",
    "value_type": "boolean",
    "attribute_group_id": "OTHERS",
    "attribute_group_name": "Outros"
  }
]
Nota:
Se o atributo IS_ELIGIBLE_FOR_PRESCRIPTION não estiver presente ou tiver um value_id diferente de "242085", o pedido não requer validação de receita.

Validar a receita médica

Uma vez confirmado que o item requer receita, utilize os endpoints documentados nas seções seguintes para completar o fluxo de validação, começando pelo listado de receitas pendentes.


Sellers com filiais

A API suporta dois tipos de seller:

  • Seller sem filiais → opera com uma única loja. O escopo da requisição é identificado apenas pelo seller_id.
  • Seller com filiais → opera com múltiplas lojas, cada uma identificada por um store_id. O escopo é identificado pelo par (seller_id, store_id).

O campo store_id é opcional em todos os endpoints (list, accept, reject, download e bulk download). Sua presença ou ausência indica o conjunto de receitas que se deseja consultar ou gerenciar:

  • Sem store_id → opera sobre receitas de sellers sem filiais.
  • Com store_id → opera sobre receitas da filial indicada.
Atenção:
Para sellers com filiais, o store_id é obrigatório quando estiver disponível no response de /orders. Se a requisição for enviada sem store_id nesse caso, falhará. Em pedidos onde o store_id não é retornado (modalidade Turbo), o escopo é identificado apenas pelo seller_id.

Os dois conjuntos estão isolados: não se misturam em um mesmo resultado e não podem ser acessados de forma cruzada.


Como obter o store_id

O store_id é obtido do response do endpoint /orders. Quando o pedido vem de um seller com múltiplas filiais, o response inclui o campo stock.store_id.

Atenção:
Em pedidos Turbo (mesmo que o seller tenha filiais), o response de /orders não retorna o store_id, e o escopo é identificado apenas pelo seller_id.
  • Seller com filiais → response inclui stock.store_id. O escopo é identificado pelo par (seller_id, store_id).
  • Seller com filiais (pedidos Turbo) → response sem store_id. O escopo é identificado apenas pelo seller_id.

Regras para accept, reject e download

Cenário store_id na requisição Resultado
Seller sem filiais omitido 200 — operação permitida
Seller com filiais omitido 403 Forbidden
Seller com filiais, pedido Turbo omitido (não disponível em /orders) 200 — operação permitida
Seller com filiais, store_id correto igual ao da filial 200 — operação permitida
Seller com filiais, store_id diferente diferente ao da filial 403 Forbidden
Seller com filiais omitido 403 Forbidden

Regras para o listado

  • Com store_id → retorna apenas receitas da filial indicada.
  • Sem store_id → retorna apenas receitas de sellers sem filiais.

Em nenhum cenário a resposta mistura os dois conjuntos. Enviar store_id para um seller sem filiais, ou omiti-lo para um seller com filiais, retorna 403 Forbidden.


Endpoints

Em todos os endpoints, o path param {flow} deve ser prescription.


1. Listar receitas pendentes

curl -L -X GET \
https://api.mercadolibre.com/v1/prescription/attachments \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer $ACCESS_TOKEN'

Lista as receitas pendentes de validação para o seller. Permite consultar quais pedidos têm receitas pendentes sem necessidade de conhecer os order_ids previamente.


Parâmetros de query

Parâmetro Tipo Obrigatório Descrição
store_id string Não Identificador da filial. Obrigatório para sellers com múltiplas filiais. Quando omitido, retorna apenas receitas de pedidos sem filial.
order_id string Não Filtra por um pedido específico
status string Não (default: WAITING_VALIDATION) Filtra por status da receita. Ver tabela de valores permitidos.
page integer Não (default: 1)
per_page integer Não (default: 20, máx: 100)
created_after string Não Filtra registros criados após a data indicada
sort string Não (default: created_at:asc) Valores: created_at:asc, created_at:desc

Valores do parâmetro status Descrição
WAITING_VALIDATION Receita pendente de validação.
ACCEPTED Receita aceita.
REJECTED Receita rejeitada. O arquivo permanece disponível para download por até 7 dias após a rejeição.

Exemplo de request:

curl -L -X GET \
https://api.mercadolibre.com/v1/prescription/attachments?store_id=12345678&page=1&per_page=20 \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer APP_USR-123467899999.....'

Response

Status Descrição Resposta
200 Sucesso
{
  "data": [
    {
      "order_id": "2000012345678",
      "store_id": "12345678",
      "status": "WAITING_VALIDATION",
      "item_id": "MLB43243243",
      "attachment_id": "MLB_112233466_0123ab3430000.pdf",
      "flow": "prescription",
      "created_at": "2026-04-20T14:00:00Z",
      "attachment_downloaded_at": null
    }
  ],
  "paging": {
    "total": 42,
    "page": 1,
    "per_page": 20
  }
}

Uma lista vazia retorna 200 com "data": [] e "paging.total": 0.

200 Sucesso — filtro REJECTED
{
  "data": [
    {
      "order_id": "2000012345678",
      "store_id": "12345678",
      "status": "REJECTED",
      "rejection_reason": "seller_reject_file_invalid",
      "item_id": "MLB43243243",
      "attachment_id": "MLB_11234569_012345.pdf",
      "flow": "prescription",
      "created_at": "2026-04-20T14:00:00Z",
      "attachment_downloaded_at": null
    }
  ],
  "paging": {
    "total": 42,
    "page": 1,
    "per_page": 20
  }
}
400 Bad Request
{ "code": "bad_request", "message": "attachment_id: is required", "error_code": "ERROR_RX_INTEGRATOR_012", "errors": [{ "field": "attachment_id", "reason": "is required" }] }
{ "code": "bad_request", "message": "status: must be one of ACCEPTED, REJECTED, WAITING_VALIDATION", "error_code": "ERROR_RX_INTEGRATOR_012", "errors": [{ "field": "status", "reason": "must be one of ACCEPTED, REJECTED, WAITING_VALIDATION" }] }
{ "code": "bad_request", "message": "invalid page", "error_code": "ERROR_RX_INTEGRATOR_013" }
{ "code": "bad_request", "message": "flow: must be a supported flow (prescription)", "error_code": "ERROR_RX_INTEGRATOR_012", "errors": [{ "field": "flow", "reason": "must be a supported flow (prescription)" }] }
401 Não autorizado. Token ausente ou inválido.
{ "blocked_by": "OfficeSec", "code": "null", "message": "", "status": 401 }
{ "blocked_by": "OfficeSec", "code": "null", "message": "token is expired", "status": 401 }
429 Rate limit excedido
{ "code": "too_many_requests", "message": "rate limit exceeded for client" }
500 Erro interno
{ "code": "internal_server_error", "message": "failed to list attachments", "error_code": "ERROR_RX_INTEGRATOR_905" }
{ "code": "internal_server_error", "message": "internal error", "error_code": "ERROR_RX_INTEGRATOR_999" }

Motivos de rejeição (rejection_reason) Descrição
seller_reject_file_expired Receita vencida
seller_reject_file_invalid_product O medicamento não corresponde ao item do pedido
seller_reject_file_quantity A quantidade não coincide com o pedido
seller_reject_file_data Dados do médico inválidos
seller_reject_file_already_used Receita já utilizada em outro pedido
seller_reject_file_invalid O arquivo não é uma receita ou é ilegível

2. Baixar receita

curl -L -X GET \
https://api.mercadolibre.com/v1/prescription/attachment/download \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer $ACCESS_TOKEN'

Faz o download de uma receita específica pelo seu attachment_id. Esta chamada registra o download do arquivo, que é um requisito prévio para aceitar ou rejeitar a receita.


Parâmetros de query

Parâmetro Tipo Obrigatório Descrição
attachment_id string Sim Identificador da receita a baixar
store_id string Não Identificador da filial. Obrigatório para sellers com múltiplas filiais.
status string Não (default: WAITING_VALIDATION) Valores: WAITING_VALIDATION, ACCEPTED

Exemplo de request:

curl -L -X GET \
https://api.mercadolibre.com/v1/prescription/attachment/download?attachment_id=MLB_112233466_0123ab3430000.pdf&store_id=12345 \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer APP_USR-123467899999.....'

Response

Status Descrição Resposta
200 Sucesso Retorna o conteúdo binário da receita (PDF). Habilita as operações de accept/reject para este attachment_id.
400 Bad Request
{ "code": "bad_request", "message": "attachment_id: is required", "error_code": "ERROR_RX_INTEGRATOR_012", "errors": [{ "field": "attachment_id", "reason": "is required" }] }
401 Não autorizado. Token ausente ou inválido.
{ "blocked_by": "OfficeSec", "code": "null", "message": "", "status": 401 }
{ "blocked_by": "OfficeSec", "code": "null", "message": "token is expired", "status": 401 }
403 Forbidden. O store_id não coincide com o do attachment.
{ "code": "forbidden", "message": "attachment_store_mismatch", "error_code": "ERROR_RX_INTEGRATOR_002" }
404 Receita não encontrada
{ "code": "not_found", "message": "attachment_not_found", "error_code": "ERROR_RX_INTEGRATOR_001" }
410 Attachment gone
{ "code": "gone", "message": "attachment_gone", "error_code": "ERROR_RX_INTEGRATOR_019" }
429 Rate limit excedido
{ "code": "too_many_requests", "message": "rate limit exceeded for client" }
500 Erro interno
{ "code": "internal_server_error", "message": "internal error", "error_code": "ERROR_RX_INTEGRATOR_900" }
{ "code": "internal_server_error", "message": "internal error", "error_code": "ERROR_RX_INTEGRATOR_901" }
{ "code": "internal_server_error", "message": "internal error", "error_code": "ERROR_RX_INTEGRATOR_907" }
{ "code": "internal_server_error", "message": "internal error", "error_code": "ERROR_RX_INTEGRATOR_999" }

3. Aceitar receita

curl -L -X POST \
https://api.mercadolibre.com/v1/prescription/attachment/accept \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer' \
--data '{
  "attachment_id": "$ATTACHMENT_ID",
  "store_id": "$STORE_ID"
}'

Aceita uma receita específica pelo seu attachment_id. Requer que a receita tenha sido baixada previamente e que seu status seja WAITING_VALIDATION.


Parâmetros do body

Parâmetro Tipo Obrigatório Descrição
attachment_id string Sim Identificador da receita a aceitar
store_id string Não Identificador da filial. Obrigatório para sellers com múltiplas filiais. Enviar store_id para um seller sem filiais retorna 403.

Exemplo de request:

curl --location 'https://api.mercadolibre.com/v1/prescription/attachment/accept' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer APP_USR-123467899999.....' \
--data '{
  "attachment_id": "MLB_112233466_0123ab3430000.pdf",
  "store_id": "123456789"
}
'

Response

Status Descrição Resposta
200 Sucesso
{
  "attachment_id": "MLB_112233466_0123ab3430000.pdf",
  "order_id": "2000012345678",
  "status": "ACCEPTED",
  "updated_at": "2026-04-21T10:30:00Z"
}
400 JSON inválido no body
{ "code": "bad_request", "message": "invalid request body", "error_code": "ERROR_RX_INTEGRATOR_013" }
400 Erro de validação
{ "code": "bad_request", "message": "attachment_id: is required", "error_code": "ERROR_RX_INTEGRATOR_012", "errors": [{ "field": "attachment_id", "reason": "is required" }] }
401 Não autorizado. Token ausente ou inválido.
{ "blocked_by": "OfficeSec", "code": "null", "message": "", "status": 401 }
403 Forbidden. O store_id não coincide.
{ "code": "forbidden", "message": "attachment_store_mismatch", "error_code": "ERROR_RX_INTEGRATOR_002" }
404 Receita não encontrada
{ "code": "not_found", "message": "attachment_not_found", "error_code": "ERROR_RX_INTEGRATOR_001" }
422 Receita não baixada previamente
{ "code": "unprocessable_entity", "message": "attachment_not_downloaded", "error_code": "ERROR_RX_INTEGRATOR_003" }
422 Receita já aceita
{ "code": "unprocessable_entity", "message": "attachment_already_accepted", "error_code": "ERROR_RX_INTEGRATOR_004" }
422 Receita já rejeitada
{ "code": "unprocessable_entity", "message": "attachment_already_rejected", "error_code": "ERROR_RX_INTEGRATOR_005" }
422 Receita não está em estado WAITING_VALIDATION
{ "code": "unprocessable_entity", "message": "attachment_not_waiting_validation", "error_code": "ERROR_RX_INTEGRATOR_006" }
429 Rate limit excedido
{ "code": "too_many_requests", "message": "rate limit exceeded for client" }
500 Erro interno
{ "code": "internal_server_error", "message": "internal error", "error_code": "ERROR_RX_INTEGRATOR_902" }
{ "code": "internal_server_error", "message": "internal error", "error_code": "ERROR_RX_INTEGRATOR_903" }
{ "code": "internal_server_error", "message": "internal error", "error_code": "ERROR_RX_INTEGRATOR_999" }

4. Rejeitar receita

curl -L -X POST \
https://api.mercadolibre.com/v1/prescription/attachment/reject \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer' \
--data '{
  "attachment_id": "$ATTACHMENT_ID",
  "store_id": "$STORE_ID",
  "reason": "$REASON"
}'

Rejeita uma receita. Requer que a receita tenha sido baixada previamente e que seja indicado um motivo de rejeição válido.

Parâmetros do body

Parâmetro Tipo Obrigatório Descrição
attachment_id string Sim Identificador da receita a rejeitar
reason string Sim Motivo de rejeição. Ver tabela de valores permitidos.
store_id string Não Identificador da filial. Obrigatório para sellers com múltiplas filiais. Enviar store_id para um seller sem filiais retorna 403.

Valores do parâmetro reason Descrição
seller_reject_file_expired Receita vencida
seller_reject_file_invalid_product O medicamento não corresponde ao item do pedido
seller_reject_file_quantity A quantidade não coincide com o pedido
seller_reject_file_data Dados do médico inválidos
seller_reject_file_already_used Receita já utilizada em outro pedido
seller_reject_file_invalid O arquivo não é uma receita ou é ilegível

Exemplo de request:

curl -L -X POST \
https://api.mercadolibre.com/v1/prescription/attachment/reject \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer APP_USR-123467899999.....' \
--data '{
  "attachment_id": "MLB_423423_4324324ad325.pdf",
  "store_id": "123456789",
  "reason": "seller_reject_file_expired"
}'

Response

Status Descrição Resposta
200 Sucesso
{
  "attachment_id": "MLB_423423_4324324ad325.pdf",
  "order_id": "2000012345678",
  "status": "REJECTED",
  "reason": "seller_reject_file_expired",
  "updated_at": "2026-04-21T11:00:00Z"
}
400 Motivo de rejeição inválido
{ "code": "bad_request", "message": "invalid_reject_reason", "error_code": "ERROR_RX_INTEGRATOR_010" }
400 JSON inválido no body
{ "code": "bad_request", "message": "invalid_json_body", "error_code": "ERROR_RX_INTEGRATOR_013" }
401 Não autorizado. Token ausente ou inválido.
{ "blocked_by": "OfficeSec", "code": "null", "message": "", "status": 401 }
403 Forbidden. O store_id não coincide.
{ "code": "forbidden", "message": "attachment_store_mismatch", "error_code": "ERROR_RX_INTEGRATOR_002" }
404 Receita não encontrada
{ "code": "not_found", "message": "attachment_not_found", "error_code": "ERROR_RX_INTEGRATOR_001" }
404 Pedido não encontrado
{ "code": "not_found", "message": "order_not_found", "error_code": "ERROR_RX_INTEGRATOR_009" }
422 Receita não baixada previamente
{ "code": "unprocessable_entity", "message": "attachment_not_downloaded", "error_code": "ERROR_RX_INTEGRATOR_003" }
422 Receita já aceita
{ "code": "unprocessable_entity", "message": "attachment_already_accepted", "error_code": "ERROR_RX_INTEGRATOR_004" }
422 Receita já rejeitada
{ "code": "unprocessable_entity", "message": "attachment_already_rejected", "error_code": "ERROR_RX_INTEGRATOR_005" }
422 Receita não está em estado WAITING_VALIDATION
{ "code": "unprocessable_entity", "message": "attachment_not_waiting_validation", "error_code": "ERROR_RX_INTEGRATOR_006" }
422 Saldo insuficiente do seller
{ "code": "unprocessable_entity", "message": "insufficient_seller_balance", "error_code": "ERROR_RX_INTEGRATOR_011" }
429 Rate limit excedido
{ "code": "too_many_requests", "message": "rate limit exceeded for client" }
500 Erro interno
{ "code": "internal_server_error", "message": "internal error", "error_code": "ERROR_RX_INTEGRATOR_902" }
{ "code": "internal_server_error", "message": "internal error", "error_code": "ERROR_RX_INTEGRATOR_903" }
{ "code": "internal_server_error", "message": "internal error", "error_code": "ERROR_RX_INTEGRATOR_904" }
{ "code": "internal_server_error", "message": "internal error", "error_code": "ERROR_RX_INTEGRATOR_999" }

5. Download massivo receitas

curl -L -X POST \
https://api.mercadolibre.com/v1/prescription/attachments/download \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer' \
--data '{
  "attachment_ids": [
    $ATTACHMENT_ID_1,
    $ATTACHMENT_ID_2,
    $ATTACHMENT_ID_3,
  ],
  "store_id": "$STORE_ID"
}
'

Faz o download de múltiplas receitas em uma única chamada. Retorna um arquivo ZIP com todos os PDFs solicitados.


Parâmetros do body

Parâmetro Tipo Obrigatório Descrição
attachment_ids array<string> (máx: 50) Sim Lista de identificadores de receitas a baixar
store_id string Não Identificador da filial
status string Não (default: WAITING_VALIDATION) Valores: WAITING_VALIDATION, ACCEPTED

Exemplo de request:

curl -L -X POST \
https://api.mercadolibre.com/v1/prescription/attachments/download \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer APP_USR-123467899999.....' \
--data '{
  "attachment_ids": [
    "MLB_112233466_0123ab3430001.pdf",
    "MLB_112233466_0123ab3430002.pdf",
    "MLB_112233466_0123ab3430003.pdf"
  ],
  "store_id": "123456789"
}
'

Response

Status Descrição Resposta
200 Sucesso. Retorna um arquivo ZIP com todas as receitas solicitadas.
HTTP/1.1 200 OK
Content-Type: application/zip
Content-Disposition: attachment; filename="ATTACHMENTS-2026-05-12.zip"
Content-Length: <bytes>
<ZIP body>
  |-- MLB_112233466_0123ab3430001.pdf
  |-- MLB_112233466_0123ab3430002.pdf
  |-- MLB_112233466_0123ab3430003.pdf
207 Sucesso parcial. O ZIP inclui as receitas disponíveis e um manifest.json com o detalhe das que não puderam ser baixadas.
HTTP/1.1 207 OK
Content-Type: application/zip
Content-Disposition: attachment; filename="ATTACHMENTS-2026-05-12.zip"
<ZIP body>
  |-- MLB_112233466_0123ab3430001.pdf
  |-- MLB_112233466_0123ab3430002.pdf
  |-- manifest.json

Conteúdo do manifest.json:

{
  "successful": ["MLB_112233466_0123ab3430001.pdf", "MLB_112233466_0123ab3430002.pdf"],
  "failed": [
    { "attachment_id": "MLB_112233466_0123ab3430003.pdf", "reason": "fetch_error" }
  ]
}
400 Bad Request
{ "code": "bad_request", "message": "seller_id: is required", "error_code": "ERROR_RX_INTEGRATOR_012", "errors": [{ "field": "seller_id", "reason": "is required" }] }
{ "code": "bad_request", "message": "attachment_ids exceeds maximum allowed limit: max 50, got 61", "error_code": "ERROR_RX_INTEGRATOR_007" }
{ "code": "bad_request", "message": "attachment archive exceeds maximum allowed size", "error_code": "ERROR_RX_INTEGRATOR_008" }
{ "code": "bad_request", "message": "status: must be one of ACCEPTED, WAITING_VALIDATION (REJECTED is reachable via the list endpoint only)", "error_code": "ERROR_RX_INTEGRATOR_012" }
{ "code": "bad_request", "message": "invalid request body", "error_code": "ERROR_RX_INTEGRATOR_013" }
401 Não autorizado. Token ausente ou inválido.
{ "blocked_by": "OfficeSec", "code": "null", "message": "", "status": 401 }
410 Attachment gone
{ "code": "gone", "message": "attachment_gone", "error_code": "ERROR_RX_INTEGRATOR_019" }
429 Rate limit excedido
{ "code": "too_many_requests", "message": "rate limit exceeded for client" }
500 Erro interno
{ "code": "internal_server_error", "message": "failed to build attachment archive", "error_code": "ERROR_RX_INTEGRATOR_906" }
{ "code": "internal_server_error", "message": "internal error", "error_code": "ERROR_RX_INTEGRATOR_999" }

Motivos de erro no manifest.json Descrição
omitted O attachment foi excluído porque não pertence ao seller, o store_id não coincide, ou o status não corresponde ao filtro aplicado.
fetch_error Erro ao recuperar o arquivo da receita.
file_too_large O arquivo excede o tamanho máximo permitido por item.

Erros

Todos os endpoints retornam um body JSON estruturado em respostas não-2xx. O campo error_code utiliza o formato ERROR_RX_INTEGRATOR_NNN.


Estrutura:

{
  "code":       "bad_request",
  "message":    "attachment_not_found",
  "error_code": "ERROR_RX_INTEGRATOR_001",
  "errors": [
    { "field": "attachment_id", "reason": "is required" }
  ]
}
  • code — texto do status HTTP em snake_case (sempre presente)
  • message — chave legível do erro (sempre presente)
  • error_code — código catalogado (sempre presente em erros)
  • errors[] — detalhe por campo (presente apenas em respostas ERROR_RX_INTEGRATOR_012)

4xx — Regras de negócio, autorização e input

Código error_code HTTP message Causa
001 ERROR_RX_INTEGRATOR_001 404 attachment_not_found O attachment_id não existe ou pertence a outro seller/filial.
002 ERROR_RX_INTEGRATOR_002 403 attachment_store_mismatch O store_id da requisição não coincide com o do attachment.
003 ERROR_RX_INTEGRATOR_003 422 attachment_not_downloaded Tentativa de aceitar ou rejeitar uma receita que não foi baixada previamente.
004 ERROR_RX_INTEGRATOR_004 422 attachment_already_accepted O attachment já está em estado ACCEPTED.
005 ERROR_RX_INTEGRATOR_005 422 attachment_already_rejected O attachment já está em estado REJECTED.
006 ERROR_RX_INTEGRATOR_006 422 attachment_not_waiting_validation O attachment não está em estado WAITING_VALIDATION.
007 ERROR_RX_INTEGRATOR_007 400 (dinâmico, inclui o limite) Foram solicitados mais de 50 attachment_ids em um bulk download.
008 ERROR_RX_INTEGRATOR_008 400 attachment archive exceeds maximum allowed size O arquivo ZIP gerado excede o tamanho máximo permitido.
009 ERROR_RX_INTEGRATOR_009 404 order_not_found O pedido associado ao attachment não foi encontrado.
010 ERROR_RX_INTEGRATOR_010 400 invalid_reject_reason O motivo de rejeição não é um dos valores permitidos.
011 ERROR_RX_INTEGRATOR_011 422 insufficient_seller_balance O seller não tem saldo suficiente para completar a operação.
012 ERROR_RX_INTEGRATOR_012 400 (join de mensagens de campo) Um ou mais campos da requisição falharam na validação estrutural. O array errors[] detalha os campos afetados.
013 ERROR_RX_INTEGRATOR_013 400 invalid request body O body da requisição não é um JSON válido. O array errors[] está ausente.
014 ERROR_RX_INTEGRATOR_014 403 payment_refund_not_authorized O reembolso do pedido não pôde ser processado porque o pagamento do seller não está autorizado para esta operação. Tentar novamente não resolverá o problema.
015 ERROR_RX_INTEGRATOR_015 409 order_conflict O pedido não pôde ser atualizado devido a uma modificação concorrente. Tente novamente após um breve intervalo.
016 ERROR_RX_INTEGRATOR_016 409 order_already_locked O pedido está temporariamente bloqueado por outra operação em andamento. Tente novamente após um breve intervalo.
019 ERROR_RX_INTEGRATOR_019 410 attachment_gone O attachment foi excluído permanentemente do banco de dados e não está mais disponível.

5xx — Erros internos

Código error_code HTTP message Causa
900 ERROR_RX_INTEGRATOR_900 500 internal error Erro ao recuperar o arquivo da receita.
901 ERROR_RX_INTEGRATOR_901 500 internal error Erro ao registrar o download do arquivo.
902 ERROR_RX_INTEGRATOR_902 500 internal error O attachment não tem um pedido associado.
903 ERROR_RX_INTEGRATOR_903 500 internal error Erro inesperado na consulta de dados.
904 ERROR_RX_INTEGRATOR_904 500 internal error Erro de configuração interna do serviço.
905 ERROR_RX_INTEGRATOR_905 500 failed to list attachments Erro ao processar o listado de receitas.
906 ERROR_RX_INTEGRATOR_906 500 failed to build attachment archive Erro ao gerar o arquivo comprimido no download em massa.
907 ERROR_RX_INTEGRATOR_907 500 internal error Erro interno ao processar o download.
999 ERROR_RX_INTEGRATOR_999 500 internal error Erro interno inesperado.