Recursos para IA

Cómo migrar de la Dynamic QR Model API a la Orders API

La Dynamic QR Model API poseía dos métodos de creación con comportamientos distintos:

  • POST /qrs, modo QR dinámico: crea un pedido y retorna una trama QR única por transacción en el campo qr_data, sin asociarla a ninguna caja. La aplicación es responsable de convertir qr_data en Código QR y mostrarlo al cliente.
  • PUT /qrs, modo QR híbrido: crea un pedido, lo asocia a la caja indicada con el {external_pos_id}, actualizando el QR estático vinculado, y retorna también el QR dinámico en el campo qr_data.

La Orders API unifica estos dos métodos en un único endpoint POST /v1/ordersAPI, diferenciando el comportamiento por el parámetro config.qr.mode: el valor dynamic corresponde al flujo POST legacy y el valor hybrid corresponde al flujo PUT legacy.

Esta distinción impactaba también los recursos de consulta y cancelación, disponibles en la Dynamic QR Model API solo para el flujo PUT. En la Orders API, estos recursos pasan a estar disponibles para los dos flujos vía order_id.

Para realizar la migración de tu integración de la Dynamic QR Model API a la Orders API, sigue las indicaciones a continuación.

Mapear los cambios de endpoint

Antes de iniciar los pasos de migración, consulta la tabla a continuación para tener una visión general de todos los cambios de endpoint. La Orders API unifica los dos métodos de creación en un único POST /v1/ordersAPI y extiende los recursos de consulta y cancelación para ambos modos.

OperaciónDynamic QR Model APIOrders API
Crear order (modo dinámico)POST /instore/orders/qr/seller/collectors/{user_id}/pos/{external_pos_id}/qrsAPIPOST /v1/ordersAPI con config.qr.mode: dynamic
Crear order (modo híbrido)PUT /instore/orders/qr/seller/collectors/{user_id}/pos/{external_pos_id}/qrsAPIPOST /v1/ordersAPI con config.qr.mode: hybrid
Consultar orderGET /instore/qr/seller/collectors/{user_id}/pos/{external_pos_id}/ordersAPI (solo flujo PUT)GET /v1/orders/{order_id}API (ambos modos)
Cancelar orderDELETE /instore/orders/qr/seller/collectors/{user_id}/pos/{external_pos_id}/qrsAPI (solo flujo PUT)POST /v1/orders/{order_id}/cancelAPI (ambos modos)
Reembolsar orderVía API de Payments (sin endpoint dedicado en la Dynamic QR Model API)POST /v1/orders/{order_id}/refundAPI

Actualizar el modelo de estado y notificaciones

Uno de los cambios más significativos entre la Dynamic QR Model API y la Orders API es el modelo de estado. En la Dynamic QR Model API, el estado de una transacción se determinaba mediante el monitoreo de notificaciones de dos tópicos independientes: payments y merchant_orders con campos y valores distintos para cada uno. La Orders API unifica ese comportamiento en un único campo status en la order. Consulta el mapeo completo a continuación.

Además, la Orders API también introduce el campo status_detail, que permite identificar con mayor detalle el estado de la transacción. Los valores posibles son created, canceled, accredited, refunded y expired.

En cuanto a las notificaciones, en la API Legacy podían configurarse mediante el campo notification_url en el body de la solicitud (modelo IPN) o mediante webhooks con los tópicos payments y merchant_orders. En la Orders API, el campo notification_url no existe y los tópicos payments y merchant_orders no son compatibles. Configura las notificaciones en Tus integraciones, suscribiéndote al tópico "Order (Mercado Pago)" (orders), antes de ir a producción. Para más información, consulta la documentación de notificaciones.

Adaptar los headers

La Orders API introduce un cambio obligatorio de header que afecta todos los endpoints. El Access Token debe enviarse vía header Authorization. Aplica el cambio a continuación antes de probar cualquier otro recurso.

Migrar la creación de orders

La Orders API unifica los dos métodos de creación en un único POST /v1/ordersAPI, diferenciando el comportamiento por el parámetro config.qr.mode. El endpoint POST /qrs, modo QR dinámico, equivale a config.qr.mode: dynamic, y el endpoint PUT /qrs, modo QR híbrido, equivale a config.qr.mode: hybrid. En ambos casos, el {user_id} deja de ser parámetro de path, el {external_pos_id} pasa al body, y el campo type: "qr" pasa a ser obligatorio. Sigue los pasos a continuación para adaptar la solicitud, la respuesta y el tratamiento de errores de cada modo.

En la Dynamic QR Model API, el identificador del pedido era retornado en el campo in_store_order_id. En la Orders API, ese identificador pasa al campo id, con formato alfanumérico, por ejemplo ORD00001111222233334444555566. Captura el valor de id del response de creación, ya que es necesario para consultas, cancelaciones y reembolsos posteriores.

Actualizar la consulta de orders

El endpoint de consulta GET /v1/orders/{order_id}API está disponible para los modos dinámico e híbrido en la Orders API. En la Dynamic QR Model API, la consulta existía solo para el flujo PUT y consultaba por caja, no por order. El flujo POST no tenía endpoint de consulta. El estado se obtenía exclusivamente vía notificaciones de payments y merchant_orders.

La Orders API permite consultar el estado completo de la order directamente por el order_id, incluyendo estado, pagos, reembolsos y datos del medio de pago.

curl
curl -X GET \
  'https://api.mercadopago.com/v1/orders/{{ORDER_ID}}' \
  -H 'Authorization: Bearer {{ACCESS_TOKEN}}'

Actualizar la cancelación de orders

El endpoint de cancelación POST /v1/orders/{order_id}/cancelAPI está disponible para ambos modos en la Orders API. En la Dynamic QR Model API, la cancelación existía solo para el flujo PUT y cancelaba la order asociada a la caja vía DELETE. El flujo POST no tenía endpoint de cancelación.

El método HTTP cambia de DELETE a POST, el {user_id} y el {external_pos_id} salen del path, y la operación pasa a identificar la order por el order_id. El response pasó de vacío (HTTP 204) al objeto completo de la order con status: "canceled" (HTTP 200).

Implementar reembolsos con el endpoint dedicado

La Orders API introduce el endpoint dedicado POST /v1/orders/{order_id}/refundAPI para reembolsos, que no existía en la Dynamic QR Model API en ninguno de los dos flujos. Antes era necesario recibir el webhook del pago, obtener el payment_id y ejecutar el reembolso por la API de Payments por separado. Ahora, el reembolso se realiza directamente sobre la order, para ambos modos.

Validar la migración

Después de aplicar los cambios, verifica que la integración opera correctamente en todos los flujos antes de ir a producción.

El header X-Idempotency-Key debe estar presente en todas las operaciones de creación, cancelación y reembolso.

Orders creadas con éxito a través del endpoint POST /v1/ordersAPI con config.qr.mode: dynamic (equivalente al flujo POST de la API legacy).

Orders creadas con éxito a través del endpoint POST /v1/ordersAPI con config.qr.mode: hybrid (equivalente al flujo PUT de la API legacy).

El campo id fue capturado del response de creación para uso en consultas, cancelaciones y reembolsos posteriores.

Orders consultadas con éxito a través del endpoint GET /v1/orders/{order_id}API en ambos modos.

Estado de orders monitoreado vía webhook con el tópico "Order (Mercado Pago)" y los nuevos valores: created, processed, canceled, refunded y expired.

Orders canceladas con éxito a través del endpoint POST /v1/orders/{order_id}/cancelAPI en ambos modos.

Reembolsos ejecutados a través del endpoint dedicado POST /v1/orders/{order_id}/refundAPI.

Accede a la documentación para saber cómo probar la integración.