Como migrar da API de Pedidos presenciais para a API de Orders
A API de Orders unifica o processamento de pagamentos com Código QR no Mercado Pago, oferecendo endpoints padronizados, um modelo de status consolidado e novos recursos nativos que não existiam na API de Pedidos presenciais. Além disso, todas as novas funcionalidades do Mercado Pago serão desenvolvidas sobre a API de Orders.
A migração da API de Pedidos presenciais para a API de Orders envolve a atualização de endpoints e campos da requisição, a consolidação do modelo de notificações e o aproveitamento de novos recursos nativos que não existiam antes: endpoints dedicados de consulta por order_id, cancelamento e reembolso. A migração não implica mudanças no fluxo de negócio: o cliente continua escaneando o QR com o aplicativo do Mercado Pago e confirmando o pagamento.
Veja a seguir como realizar esta migração de forma completa.
Mapear as mudanças de endpoint
Antes de iniciar os passos de migração, consulte a tabela abaixo para ter uma visão geral de todas as mudanças de endpoint. Na API de Pedidos presenciais, cada operação utilizava uma URL com o identificador do usuário e da caixa no path. A API de Orders consolida essas operações em endpoints padronizados e introduz recursos que não existiam antes.
Na API de Pedidos presenciais, existiam dois endpoints válidos para criação e cancelamento: /mpmobile/instore/qr/{user_id}/{external_id}, usando o identificador externo da caixa, e /mpmobile/instore/qr/{pos_id}, usando o identificador interno. Ambos migram para o mesmo endpoint na API de Orders: POST /v1/ordersAPI, onde a caixa é identificada pelo campo config.qr.external_pos_id no body.
Atualizar o modelo de status e notificações
Uma das mudanças mais significativas entre a API de Pedidos presenciais e a API de Orders é o modelo de status. Na API de Pedidos presenciais, o estado de uma transação era determinado pelo monitoramento de notificações de dois tópicos independentes: payments e merchant_orders com campos e valores distintos para cada um. A API de Orders unifica esse comportamento em um único campo status na order. Consulte o mapeamento completo abaixo.
Além disso, a API de Orders também introduz o campo status_detail, que permite identificar com maior detalhamento o estado da transação. Os valores possíveis são created, canceled, accredited, refunded e expired.
Na API de Pedidos presenciais, a merchant_order é criada no momento em que o pedido é gerado, portanto as notificações do tópico merchant_orders estão disponíveis desde o início do fluxo. O objeto payment, por outro lado, só é criado quando existe uma tentativa de pagamento, aprovado ou rejeitado. Quem monitorava apenas o tópico payments não recebia nenhuma notificação até que o usuário iniciasse o processo de pagamento. Na API de Orders, esse comportamento é unificado: o campo status da order reflete o estado completo desde a criação, sem necessidade de monitorar dois tópicos independentes.
Tópico payments (status)
Tópico merchant_orders (status / order_status)
API de Orders (status)
Observação
—
opened (sem pagamento ou com pagamento rejeitado)
created
Na API de Pedidos presenciais, opened indicava que o pedido ainda não tinha um pagamento aprovado. Na API de Orders, esse estado é explícito desde a criação.
approved
closed + order_status: "paid"
processed
Ambos os tópicos convergiam no mesmo resultado: pagamento aprovado. Na API de Orders, o estado é autocontido.
rejected
opened (a merchant_order não muda de estado e permanece aberta)
Sem equivalente
Na API de Pedidos presenciais, um pagamento rejeitado deixava a merchant_order em opened aguardando uma nova tentativa. Na API de Orders, pagamentos rejeitados não são expostos e o estado permanece em created até receber um pagamento aprovado.
refunded
closed + order_status: "reverted"
refunded
Reembolso total. No tópico merchant_orders, identificável por order_status: "reverted".
closed + pagamento com status_detail: "partially_refunded"
refunded
Reembolso parcial. Na API de Pedidos presenciais, era necessário inspecionar o status_detail do pagamento dentro da merchant_order. Na API de Orders, o estado é o mesmo do reembolso total, mas o status_detail indica partially_refunded.
—
—
canceled
Novo status sem equivalência na API de Pedidos presenciais.
—
—
expired
Novo status sem equivalência na API de Pedidos presenciais.
Ao migrar para a API de Orders, configure as notificações webhook na sua aplicação selecionando o tópico "Order (Mercado Pago)". Não utilize os tópicos payments ou merchant_orders para monitorar o estado das orders criadas pela nova API, pois não são compatíveis com o modelo unificado de status. Para mais informações, acesse a documentação de notificações.
Adaptar os headers
A API de Orders introduz duas mudanças obrigatórias de headers que afetam todos os endpoints. O Access Token deve ser enviado via headerAuthorization. O envio via query param não é permitido na API de Orders. Aplique as alterações a seguir antes de testar qualquer outro recurso.
O headerX-Ttl-Store-Preference era utilizado na API de Pedidos presenciais para definir o tempo de validade do pedido em segundos. Na API de Orders, essa funcionalidade foi substituída pelo campo expiration_time no body da requisição, em formato ISO 8601, por exemplo PT5M para 5 minutos. O valor padrão é PT10M. Valores maiores que 10 minutos são ignorados e a order expira em 10 minutos. Remova esse header de todas as requisições e migre o controle de validade para o campo expiration_time.
O headerX-Idempotency-Key é obrigatório nas operações de criação, cancelamento e reembolso de orders. Ele garante que uma requisição repetida com a mesma chave retorne o resultado original sem processar a operação novamente. Envie um UUID v4 ou string aleatória única por requisição. Operações do tipo GET não requerem este header.
Se a mesma X-Idempotency-Key for reutilizada com um body diferente, a API retornará o erro idempotency_key_already_used. Gere uma nova chave para cada operação distinta.
Migrar a criação de orders
Os endpoints de criação POST /mpmobile/instore/qr/{user_id}/{external_id}API e POST /mpmobile/instore/qr/{pos_id} migram para POST /v1/ordersAPI. Além da mudança de URL, a estrutura da requisição foi significativamente reorganizada: o identificador do usuário e da caixa deixam o path e passam para o body, novos campos obrigatórios foram introduzidos e a API de Orders oferece três modos de QR configuráveis via config.qr.mode. Siga os passos abaixo para adaptar a requisição, a resposta e o tratamento de erros.
Na API de Orders, a identidade do usuário é obtida diretamente do Access Token. O {user_id} deixa de ser parâmetro de path. A caixa passa a ser identificada pelo campo config.qr.external_pos_id no body. Os campos type, com valor "qr", e external_reference passam a ser obrigatórios. A tabela abaixo apresenta os campos que existiam em ambas as APIs e sofreram alterações na migração.
API de Pedidos presenciais
API de Orders
Descrição
Alteração
{user_id} (path param)
Não existe
Identificador do usuário de Mercado Pago. Na API de Pedidos presenciais, era enviado no path. Na API de Orders, a identidade é obtida diretamente do Access Token.
Deixa de ser parâmetro de path.
{external_id} (path param)
config.qr.external_pos_id
Identificador externo da caixa, definido pelo integrador. Na API de Pedidos presenciais, era enviado no path. Na API de Orders, é enviado no body dentro de config.qr.
Deixa de ser parâmetro de path e passa para o body.
external_reference
external_reference
Referência que pode sincronizar com o sistema de venda do integrador. Na API de Orders, é obrigatório, com no máximo 64 caracteres, apenas letras, números, - e _. Não pode conter dados PII.
Passa a ser obrigatório.
notification_url
Não existe
URL para receber notificações de pagamento ou merchant_order. Na API de Orders, as notificações são configuradas como webhook na sua aplicação em Suas integrações, selecionando o tópico "Order (Mercado Pago)". Para mais informações, acesse a documentação de notificações.
Removido do body.
sponsor_id
integration_data.sponsor.id
USER_ID da conta do Mercado Pago do sistema integrador.
Passa para o nó integration_data.sponsor.
items[].id
items[].external_code
Identificador do item no sistema externo.
Renomeado para items[].external_code.
items[].title
items[].title
Nome do item. Na API de Orders, máx. 150 caracteres.
Passa a ser obrigatório.
items[].currency_id
Não existe
Identificador da moeda do item em formato ISO 4217. Na API de Orders, a moeda é determinada a partir da conta do vendedor.
Removido.
items[].unit_price
items[].unit_price
Preço unitário do item. Na API de Pedidos presenciais, era number. Na API de Orders, é string decimal. Aceita dois decimais (ex.: "15.00") ou nenhum.
Muda de number para string decimal e passa a ser obrigatório.
items[].quantity
items[].quantity
Quantidade de itens. Na API de Pedidos presenciais, era number. Na API de Orders, é integer.
Muda de number para integer e passa a ser obrigatório.
items[].description
description
Descrição do item ou motivo da order. Na API de Orders, a descrição passa a existir apenas no nível raiz da order, não dentro de items. Máx. 150 caracteres. Não deve conter dados PII.
Move do nível de item para o nível raiz da order.
items[].picture_url
Não existe
URL da imagem do item.
Removido. Não tem equivalente na API de Orders.
marketplace_fee
marketplace_fee
Valor da tarifa do marketplace. Na API de Pedidos presenciais, era number. Na API de Orders, é string decimal. Aceita dois decimais (ex.: "15.00") ou nenhum. Exclusivo para integrações com OAuth.
Muda de number para string decimal.
X-Ttl-Store-Preference (header)
expiration_time
Tempo de validade do pedido. Na API de Pedidos presenciais, era definido em segundos via header. Na API de Orders, é definido em formato ISO 8601 (ex.: PT5M para 5 minutos) no body. Mínimo: 30 segundos. Máximo: 3600 horas. Para o modo static, o valor padrão é PT10M. Valores maiores que 10 minutos são ignorados e a order expira em 10 minutos.
Muda de header em segundos para campo no body em formato ISO 8601.
A API de Orders também introduz os seguintes campos sem equivalência na API de Pedidos presenciais.
Campo
Descrição
type
Tipo de order. Para pagamentos com QR, o único valor possível é "qr". Obrigatório.
total_amount
Valor total da order. Representa a soma das transações. Aceita dois decimais (ex.: "15.00") ou nenhum.
config.qr.mode
Modo de QR. Valores: static (QR estático associado à caixa, equivalente ao comportamento da API de Pedidos presenciais), dynamic (QR único por transação, retornado em type_response.qr_data), hybrid (ambos os modos em paralelo). Valor padrão: static.
transactions.payments[].amount
Valor do pagamento dentro do nó transactions. Aceita dois decimais (ex.: "15.00") ou nenhum. Apenas 1 transação de pagamento por order.
items[].unit_measure
Unidade de medida do item. Máx. 10 caracteres. Obrigatório.
items[].external_categories[].id
Identificador de categoria do item no sistema externo. Habilita descontos por categoria. Não pode ser usado junto com discounts.
discounts.payment_methods[].new_total_amount
Novo valor total da order quando um desconto é aplicado. Aceita dois decimais (ex.: "15.00") ou nenhum. Não pode ser usado junto com items[].external_categories.
discounts.payment_methods[].type
Meio de pagamento ao qual o desconto se aplica. Valores: debit_card, credit_card, account_money, prepaid_card. Até 4 meios podem ser definidos.
integration_data.platform_id
Identificador da plataforma, atribuído pelo Mercado Pago.
integration_data.integrator_id
Identificador do integrador, atribuído pelo Mercado Pago. Deve ter o prefixo dev_.
A tabela abaixo apresenta os campos do response de criação que existiam em ambas as APIs e sofreram alterações na migração.
API de Pedidos presenciais
API de Orders
Descrição
Alteração
id
id
Identificador da order criada. Na API de Pedidos presenciais, o formato era {collector_id}-{uuid}. Na API de Orders, é um ID alfanumérico próprio (ex.: ORD00001111222233334444555566).
Formato do ID muda de {collector_id}-{uuid} para ID alfanumérico.
collector_id
user_id
Identificador do vendedor. Na API de Pedidos presenciais, era integer. Na API de Orders, é string.
Renomeado de collector_id para user_id. Muda de integer para string.
collector
Não existe
Dados do vendedor.
Removido. Os dados do vendedor não são retornados na order.
total_amount
total_amount
Valor total da order. Na API de Pedidos presenciais, era number. Na API de Orders, é string decimal.
Muda de number para string decimal.
amount
Não existe
Valor do pedido. Era sempre igual a total_amount.
Removido. Na API de Orders, o valor do pagamento está em transactions.payments[].amount.
external_reference
external_reference
Referência externa da order.
Sem alteração.
notification_url
Não existe
URL configurada para receber notificações.
Removido do response. Configure as notificações webhook na sua aplicação em Suas integrações. Para mais informações, acesse a documentação de notificações.
expiration_date_to
Não existe
Data e hora de expiração do pedido em formato ISO 8601 absoluto.
Removido. Na API de Orders, a expiração é configurada como duração relativa em expiration_time.
expires
Não existe
Indica se o pedido tem data de expiração.
Removido. Na API de Orders, a order sempre expira.
marketplace_fee
marketplace_fee
Tarifa do marketplace. Na API de Pedidos presenciais, era number. Na API de Orders, é string decimal.
Muda de number para string decimal.
sponsor_id
integration_data.sponsor.id
USER_ID do sistema integrador. Na API de Pedidos presenciais, era integer. Na API de Orders, é string.
Passa para integration_data.sponsor. Muda de integer para string.
site_id
country_code
Identificador do site/país. Na API de Pedidos presenciais, o formato era em minúsculas (ex.: "mla"). Na API de Orders, é o código do país em maiúsculas (ex.: "AR").
Renomeado de site_id para country_code. Formato muda de minúsculas para maiúsculas.
items[].description
description
Descrição do item.
Move do nível de item para o nível raiz da order.
items[].id
items[].external_code
Identificador do item no sistema externo.
Renomeado para items[].external_code.
Na migração para a API de Orders, os seguintes campos foram removidos e não possuem equivalente direto.
Campo
Observação
operation_type
Removido. Não tem equivalente na API de Orders.
payment_methods
Removido. Exclusões de meios de pagamento não são retornadas a nível de order.
payment_methods.included_payment_types
Removido junto com o nó payment_methods.
marketplace
Removido. Não tem equivalente na API de Orders.
back_urls
Removido. Não tem equivalente na API de Orders.
payer
Removido. Os dados do pagador não são retornados no response de criação.
client_id
Removido. Redundante com user_id.
processing_modes
Removido. Substituído pelo campo processing_mode (string) na API de Orders.
internal_metadata
Removido. Campo de uso interno sem equivalente na API de Orders.
items[].currency_id
Removido. A moeda é exposta a nível de order no campo currency.
items[].picture_url
Removido. Não tem equivalente na API de Orders.
A API de Orders também introduz os seguintes campos no response de criação.
Campo
Descrição
type
Tipo de order. Para QR: sempre qr.
description
Descrição do produto ou serviço, motivo da order (em Legacy era items[].description).
expiration_time
Tempo de expiração da order em formato ISO 8601.
processing_mode
Modo de processamento. Para QR: sempre automatic.
status
Estado atual da order. Ao criar: created.
status_detail
Detalhe do estado atual da order. Os valores possíveis são created, canceled, accredited, refunded, expired.
currency
Identificador da moeda. Valores: ARS, BRL, CLP, UYU.
created_date
Data de criação da order. Formato yyyy-MM-ddTHH:mm:ss.sssZ.
last_updated_date
Data da última atualização da order. Formato yyyy-MM-ddTHH:mm:ss.sssZ.
config.qr.external_pos_id
Identificador externo da caixa associada à order.
config.qr.mode
Modo de QR configurado. Valores: static, dynamic, hybrid.
transactions.payments[].id
Identificador da transação de pagamento.
transactions.payments[].amount
Valor do pagamento.
transactions.payments[].status
Estado do pagamento. Ao criar: created.
transactions.payments[].status_detail
Detalhe do estado do pagamento. Ao criar: ready_to_process.
type_response.qr_data
Trama QR que deve ser convertida em código QR para que o pagamento possa ser efetuado. Presente apenas quando config.qr.mode é dynamic ou hybrid.
integration_data.application_id
Identificador da aplicação do Mercado Pago.
items[].title
Nome do item.
items[].unit_price
Preço unitário do item.
items[].quantity
Quantidade de itens.
items[].unit_measure
Unidade de medida do item.
items[].external_categories[].id
Identificador de categoria do item no sistema externo.
discounts.payment_methods[].new_total_amount
Novo valor total da order quando um desconto é aplicado.
discounts.payment_methods[].type
Meio de pagamento ao qual o desconto se aplica.
A API de Orders consolida a maioria dos erros de validação específicos por campo nos códigos genéricos property_value e property_type, com o detalhe do campo no corpo da resposta. Além disso, as mensagens de resposta são mais descritivas, facilitando a identificação e resolução de problemas. Consulte as tabelas abaixo para mais detalhes.
Erros que desaparecem
Os seguintes erros existem na API de Pedidos presenciais mas não têm equivalência na API de Orders.
HTTP
API de Pedidos presenciais
Observação
400
invalid_collector_id
Removido. A identidade é obtida diretamente do Access Token.
Erros renomeados
Os seguintes erros foram renomeados na API de Orders.
HTTP
API de Pedidos presenciais
API de Orders
Observação
400
invalid_sponsor_id
sponsor_id_not_valid
O campo migra para integration_data.sponsor.id.
404
pos_obtainment_error
pos_not_found
O external_pos_id deixa de ser parâmetro de path e passa para o body.
Erros que mudam de comportamento
Os seguintes erros existem em ambas as APIs mas com comportamento diferente na API de Orders.
HTTP
API de Pedidos presenciais
API de Orders
Observação
400
invalid_items
property_value
property_value consolida os erros de validação por campo. O campo com erro está indicado no detalhe da resposta.
400
json_syntax_error
property_type
Equivalente mais próximo. Na API de Pedidos presenciais, cobria também JSON malformado em geral.
400
invalid_access_token
unauthorized (HTTP 401)
Na API de Pedidos presenciais, era 400. Na API de Orders, é 401.
Erros que permanecem iguais
O seguinte erro tem o mesmo comportamento em ambas as APIs.
HTTP
Erro
Observação
500
Genérico
Erro interno. Verifique o retorno e repita a requisição.
Erros introduzidos pela API de Orders
Os seguintes erros não têm equivalência na API de Pedidos presenciais.
HTTP
Erro
Observação
400
empty_required_header
X-Idempotency-Key ausente.
400
unsupported_site
Tentativa de criar a order em um país não suportado.
400
unsupported_properties
Propriedade não suportada no body. O campo com erro está indicado no detalhe da resposta.
400
bad_request
Campos não suportados ou inválidos em geral.
400
marketplace_not_valid
O Access Token não foi obtido via OAuth e não é possível identificar um marketplace válido.
404
marketplace_fee_not_allowed
Não é permitido enviar marketplace_fee porque o marketplace não foi encontrado.
409
idempotency_key_already_used
O X-Idempotency-Key já foi utilizado com uma requisição distinta nas últimas 24 horas.
Implementar a consulta de orders
O endpoint de consulta GET /v1/orders/{order_id}API é uma novidade exclusiva da API de Orders. A API de Pedidos presenciais não contava com um endpoint dedicado para consultar o estado de uma transação. Anteriormente, o estado era obtido exclusivamente via notificações de webhook dos tópicos payments e merchant_orders. A API de Orders permite consultar o estado completo da order a qualquer momento, incluindo status, pagamentos, reembolsos e dados do meio de pagamento.
curl
curl -X GET \
'https://api.mercadopago.com/v1/orders/{{ORDER_ID}}' \
-H 'Authorization: Bearer {{ACCESS_TOKEN}}'
O response do GET inclui todos os campos do response de criação, além dos campos adicionais a seguir, disponíveis após o processamento do pagamento.
Campo
Descrição
integration_data.platform_id
Identificador da plataforma, atribuído pelo Mercado Pago.
integration_data.integrator_id
Identificador do integrador, atribuído pelo Mercado Pago.
integration_data.sponsor.id
USER_ID do sistema integrador.
transactions.payments[].refunded_amount
Valor reembolsado. Presente apenas quando houve um reembolso.
transactions.payments[].paid_amount
Valor total pago. Se o pagamento foi feito com desconto, reflete esse valor.
transactions.payments[].status
Estado atual do pagamento. Valores: created, canceled, processed, refunded, expired.
transactions.payments[].status_detail
Estado detalhado do pagamento. Valores: created, canceled_by_api, accredited, refunded, expired, in_review.
Identificador do meio de pagamento ou bandeira do cartão.
transactions.payments[].discounts.type
Meio de pagamento com o qual o desconto foi aplicado. Presente apenas se um desconto foi aplicado.
transactions.refunds[].id
Identificador da transação de reembolso.
transactions.refunds[].transaction_id
Identificador do pagamento que está sendo reembolsado.
transactions.refunds[].reference_id
Identificador que associa a transação ao seu reembolso.
transactions.refunds[].amount
Valor devolvido no reembolso.
transactions.refunds[].status
Estado do reembolso. Valores: processing, processed, failed.
items[].title
Nome do item.
items[].unit_price
Preço unitário do item.
items[].quantity
Quantidade de itens.
items[].unit_measure
Unidade de medida do item.
items[].external_code
Código externo do item.
items[].external_categories[].id
Identificador de categoria do item.
discounts.payment_methods[].new_total_amount
Novo valor total quando um desconto é aplicado.
discounts.payment_methods[].type
Meio de pagamento ao qual o desconto se aplica.
Como este é um endpoint novo na API de Orders, não há equivalente na API de Pedidos presenciais. Os erros documentados abaixo são exclusivos da nova API.
HTTP
Erro
Observação
400
invalid_path_param
O order_id enviado para a consulta da order tem formato inválido. Deve começar com o prefixo ORD seguido de 26 caracteres.
401
unauthorized
Access Token inválido ou expirado.
404
order_not_found
O order_id não corresponde a nenhuma order criada.
500
Genérico
Erro interno. Verifique o retorno e repita a requisição.
Na API de Pedidos presenciais, o cancelamento apagava a order ativa associada à caixa, uma operação sobre a caixa e não sobre a transação individual. Na API de Orders, o cancelamento opera diretamente sobre a order pelo order_id, sem depender da caixa no path. O response passou de vazio, código HTTP 204, para o objeto completo da order com status: "canceled", código HTTP 200.
O header necessário nesta operação é:
Header
Obrigatoriedade
Descrição
X-Idempotency-Key
Obrigatório
Chave única por requisição.
O response retorna o objeto completo da order com status: "canceled". Na API de Pedidos presenciais, o cancelamento retornava HTTP 204 sem body. A tabela a seguir lista os campos retornados no response de cancelamento.
Campo
Descrição
id
Identificador da order cancelada, gerado pelo Mercado Pago.
user_id
Identificador do usuário do Mercado Pago que criou a order.
type
Tipo de order. Para QR: sempre qr.
external_reference
Referência externa da order, atribuída no momento da criação.
description
Descrição do produto ou serviço, motivo da order.
expiration_time
Tempo de expiração da order em formato ISO 8601.
processing_mode
Modo de processamento. Para QR: sempre automatic.
total_amount
Valor total da order.
country_code
Identificador do site/país da aplicação do Mercado Pago.
marketplace_fee
Tarifa do marketplace. Exclusivo para integrações com OAuth.
integration_data.application_id
Identificador da aplicação do Mercado Pago que criou a order.
integration_data.platform_id
Identificador da plataforma, atribuído pelo Mercado Pago.
integration_data.integrator_id
Identificador do integrador, atribuído pelo Mercado Pago.
integration_data.sponsor.id
USER_ID do sistema integrador.
status
Estado atual da order. Ao cancelar: canceled.
status_detail
Detalhe do estado atual da order. Ao cancelar: canceled.
currency
Identificador da moeda utilizada. Valores: ARS, BRL, CLP, UYU.
created_date
Data de criação da order. Formato yyyy-MM-ddTHH:mm:ss.sssZ.
last_updated_date
Data da última atualização da order. Formato yyyy-MM-ddTHH:mm:ss.sssZ.
config.qr.external_pos_id
Identificador externo da caixa associada à order.
config.qr.mode
Modo de QR configurado. Valores: static, dynamic, hybrid.
transactions.payments[].id
Identificador da transação de pagamento, gerado pelo Mercado Pago.
transactions.payments[].amount
Valor do pagamento.
transactions.payments[].status
Estado do pagamento. Ao cancelar: canceled.
transactions.payments[].status_detail
Detalhe do estado do pagamento. Ao cancelar: canceled_by_api.
transactions.payments[].reference_id
Identificador do pagamento associado à order.
items[].title
Nome do item.
items[].unit_price
Preço unitário do item.
items[].quantity
Quantidade de itens.
items[].unit_measure
Unidade de medida do item.
items[].external_code
Código externo do item (ex.: EAN).
items[].external_categories[].id
Identificador de categoria do item no sistema externo.
discounts.payment_methods[].new_total_amount
Novo valor total da order quando um desconto é aplicado.
discounts.payment_methods[].type
Meio de pagamento ao qual o desconto se aplica.
No cancelamento, os erros foram agrupados conforme o tipo de alteração. Consulte as tabelas abaixo para mais detalhes.
Erros que desaparecem
Os seguintes erros existem na API de Pedidos presenciais mas não têm equivalência na API de Orders.
HTTP
API de Pedidos presenciais
Observação
400
invalid_collector_id
Removido na API de Orders.
401
unauthorized (authorization value not present)
Removido. Ocorria ao enviar {user_id} alfanumérico. A identidade é obtida diretamente do Access Token.
403
forbidden
Removido. Ocorria quando o {user_id} não pertencia ao dono do Access Token.
Erros renomeados
Os seguintes erros foram renomeados na API de Orders.
HTTP
API de Pedidos presenciais
API de Orders
Observação
400 → 404
pos_obtainment_by_external_id_error
order_not_found
Na API de Pedidos presenciais, era 400. Na API de Orders, é 404. O cancelamento passa a operar sobre o order_id.
Erros que mudam de comportamento
Os seguintes erros existem em ambas as APIs mas com comportamento diferente na API de Orders.
HTTP
API de Pedidos presenciais
API de Orders
Observação
400 → 401
invalid_access_token
unauthorized
Na API de Pedidos presenciais, era 400. Na API de Orders, é 401.
Erros que permanecem iguais
O seguinte erro tem o mesmo comportamento em ambas as APIs.
HTTP
Erro
Observação
500
Genérico
Erro interno. Verifique o retorno e repita a requisição.
Erros introduzidos pela API de Orders
Os seguintes erros não têm equivalência na API de Pedidos presenciais.
HTTP
Erro
Observação
400
empty_required_header
X-Idempotency-Key ausente.
400
invalid_path_param
O order_id tem formato inválido. Deve começar com ORD seguido de 26 caracteres.
401
unauthorized
Token inválido ou expirado. O equivalente na API de Pedidos presenciais era invalid_access_token com código 400.
404
order_not_found
O order_id não corresponde a nenhuma order criada.
409
idempotency_key_already_used
O X-Idempotency-Key já foi utilizado com uma requisição distinta.
409
order_already_canceled
A order já está cancelada. Orders só podem ser canceladas com status: created.
409
instore_order_locked_error
Não é possível cancelar uma order enquanto o pagamento está em andamento.
Implementar reembolsos com o endpoint dedicado
A API de Orders introduz o endpoint dedicado POST /v1/orders/{order_id}/refundAPI para reembolsos, que não existia na API de Pedidos presenciais. Anteriormente, era necessário receber o webhook do pagamento, obter o payment_id e executar o reembolso pela API de Payments separadamente. Agora, o reembolso é realizado diretamente sobre a order.
A API de Payments não deve ser utilizada em integrações com a API de Orders. Todas as operações, incluindo reembolsos, devem ser realizadas pela API de Orders.
Escolha entre reembolso total ou parcial de acordo com o valor a ser devolvido.