Recursos para IA

Como migrar da Dynamic QR Model API para a Orders API

A Dynamic QR Model API possuía dois métodos de criação com comportamentos distintos:

  • POST /qrs, modo QR dinâmico: cria um pedido e retorna uma trama QR única por transação no campo qr_data, sem associá-la a nenhuma caixa. A aplicação é responsável por converter qr_data em código QR e exibi-lo ao cliente.
  • PUT /qrs, modo QR híbrido: cria um pedido, o associa à caixa indicada com o {external_pos_id}, atualizando o QR estático vinculado, e retorna também o QR dinâmico no campo qr_data.

A Orders API unifica esses dois métodos em um único endpoint POST /v1/ordersAPI, diferenciando o comportamento pelo parâmetro config.qr.mode: o valor dynamic corresponde ao fluxo POST legacy e o valor hybrid corresponde ao fluxo PUT legacy.

Essa distinção impactava também os recursos de consulta e cancelamento, disponíveis na Dynamic QR Model API apenas para o fluxo PUT. Na Orders API, esses recursos passam a estar disponíveis para os dois fluxos via order_id.

Para realizar a migração da sua integração da Dynamic QR Model API para a Orders API, siga as instruções a seguir.

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. A Orders API unifica os dois métodos de criação em um único POST /v1/ordersAPI e estende os recursos de consulta e cancelamento para ambos os modos.

OperaçãoDynamic QR Model APIOrders API
Criar order (modo dinâmico)POST /instore/orders/qr/seller/collectors/{user_id}/pos/{external_pos_id}/qrsAPIPOST /v1/ordersAPI com config.qr.mode: dynamic
Criar order (modo híbrido)PUT /instore/orders/qr/seller/collectors/{user_id}/pos/{external_pos_id}/qrsAPIPOST /v1/ordersAPI com config.qr.mode: hybrid
Consultar orderGET /instore/qr/seller/collectors/{user_id}/pos/{external_pos_id}/ordersAPI (apenas fluxo PUT)GET /v1/orders/{order_id}API (ambos os modos)
Cancelar orderDELETE /instore/orders/qr/seller/collectors/{user_id}/pos/{external_pos_id}/qrsAPI (apenas fluxo PUT)POST /v1/orders/{order_id}/cancelAPI (ambos os modos)
Reembolsar orderVia API de Payments (sem endpoint dedicado na Dynamic QR Model API)POST /v1/orders/{order_id}/refundAPI

Atualizar o modelo de status e notificações

Uma das mudanças mais significativas entre a Dynamic QR Model API e a Orders API é o modelo de status. Na Dynamic QR Model API, 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 Orders API unifica esse comportamento em um único campo status na order. Consulte o mapeamento completo abaixo.

Além disso, a Orders API 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.

Quanto às notificações, na API Legacy podiam ser configuradas pelo campo notification_url no body da requisição (modelo IPN) ou por webhooks com os tópicos payments e merchant_orders. Na Orders API, o campo notification_url não existe e os tópicos payments e merchant_orders não são compatíveis. Configure as notificações em Suas integrações, selecionando o tópico "Order (Mercado Pago)" (orders) antes de subir em produção. Para mais informações, acesse a documentação de notificações.

Adaptar os headers

A Orders API introduz uma mudança obrigatória de header que afeta todos os endpoints. O Access Token deve ser enviado via header Authorization. Aplique a alteração a seguir antes de testar qualquer outro recurso.

Migrar a criação de orders

A Orders API unifica os dois métodos de criação em um único POST /v1/ordersAPI, diferenciando o comportamento pelo parâmetro config.qr.mode. O endpoint POST /qrs, modo QR dinâmico, equivale a config.qr.mode: dynamic, e o endpoint PUT /qrs, modo QR híbrido, equivale a config.qr.mode: hybrid. Em ambos os casos, o {user_id} deixa de ser parâmetro de path, o {external_pos_id} passa para o body, e o campo type: "qr" passa a ser obrigatório. Siga os passos abaixo para adaptar a requisição, a resposta e o tratamento de erros de cada modo.

Na Dynamic QR Model API, o identificador do pedido era retornado no campo in_store_order_id. Na Orders API, esse identificador passa para o campo id, com formato alfanumérico, por exemplo ORD00001111222233334444555566. Capture o valor de id do response de criação, pois é necessário para consultas, cancelamentos e reembolsos posteriores.

Atualizar a consulta de orders

O endpoint de consulta GET /v1/orders/{order_id}API está disponível para os modos dinâmico e híbrido na Orders API. Na Dynamic QR Model API, a consulta existia apenas para o fluxo PUT e consultava por caixa, não por order. O fluxo POST não tinha endpoint de consulta. O estado era obtido exclusivamente via notificações de payments e merchant_orders.

A Orders API permite consultar o estado completo da order diretamente pelo order_id, 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}}'

Atualizar o cancelamento de orders

O endpoint de cancelamento POST /v1/orders/{order_id}/cancelAPI está disponível para ambos os modos na Orders API. Na Dynamic QR Model API, o cancelamento existia apenas para o fluxo PUT e cancelava a order associada à caixa via DELETE. O fluxo POST não tinha endpoint de cancelamento.

O método HTTP muda de DELETE para POST, o {user_id} e o {external_pos_id} saem do path, e a operação passa a identificar a order pelo order_id. O response passou de vazio, código HTTP 204, para o objeto completo da order com status: "canceled", código HTTP 200.

Implementar reembolsos com o endpoint dedicado

A Orders API introduz o endpoint dedicado POST /v1/orders/{order_id}/refundAPI para reembolsos, que não existia na Dynamic QR Model API em nenhum dos dois fluxos. 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, para ambos os modos.

Validar a migração

Após aplicar as alterações, verifique se a integração opera corretamente em todos os fluxos antes de ir a produção.

O header X-Idempotency-Key deve estar presente em todas as operações de criação, cancelamento e reembolso.

Orders criadas com sucesso pelo endpoint POST /v1/ordersAPI com config.qr.mode: dynamic (equivalente ao fluxo POST da API legacy).

Orders criadas com sucesso pelo endpoint POST /v1/ordersAPI com config.qr.mode: hybrid (equivalente ao fluxo PUT da API legacy).

O campo id foi capturado do response de criação para uso em consultas, cancelamentos e reembolsos posteriores.

Orders consultadas com sucesso pelo endpoint GET /v1/orders/{order_id}API em ambos os modos.

Status de orders monitorados via webhook com o tópico "Order (Mercado Pago)" e os novos valores: created, processed, canceled, refunded e expired.

Orders canceladas com sucesso pelo endpoint POST /v1/orders/{order_id}/cancelAPI em ambos os modos.

Reembolsos executados pelo endpoint dedicado POST /v1/orders/{order_id}/refundAPI.

Acesse a documentação para saber como testar a integração.