Recursos para IA

Cómo migrar de la API de Órdenes presenciales V2 a la API de Orders

La API de Orders unifica el procesamiento de pagos con Código QR en Mercado Pago, ofreciendo endpoints estandarizados, un modelo de status consolidado y nuevos recursos nativos que no existían en la API de Órdenes presenciales V2. Además, todas las nuevas funcionalidades de Mercado Pago se desarrollarán sobre la API de Orders.

La migración de la API de Órdenes presenciales V2 a la API de Orders implica la actualización de endpoints y campos de la solicitud, la consolidación del modelo de notificaciones y el aprovechamiento de nuevos recursos nativos, como los endpoints dedicados de cancelación y reembolso. El principal cambio en la creación es que la API de Orders retorna 201 Created con el objeto completo de la order, en lugar de 204 No Content sin body. La migración no implica cambios en el flujo de negocio: el cliente continúa escaneando el Código QR con la aplicación de Mercado Pago y confirmando el pago.

Consulta a continuación cómo realizar esta migración de forma completa.

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. En la API de Órdenes presenciales V2, cada operación utilizaba una URL con el identificador del usuario, de la tienda y de la caja en el path. La API de Orders consolida estas operaciones en endpoints estandarizados identificados por el order_id.

Actualizar el modelo de status y notificaciones

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

Además, la API de Orders 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.

Adaptar los headers

La API de Orders introduce un cambio obligatorio de header que afecta a todos los endpoints. El Access Token debe enviarse vía header Authorization. El envío vía query param no está permitido en la API de Orders. Aplica el cambio a continuación antes de probar cualquier otro recurso.

Migrar la creación de orders

El endpoint de creación cambia de PUT /instore/qr/seller/collectors/{user_id}/stores/{external_store_id}/pos/{external_pos_id}/ordersAPI a POST /v1/ordersAPI. Además del cambio de método de PUT a POST y de la URL, la respuesta pasa de HTTP 204 No Content sin body a 201 Created con el objeto completo de la order. El {user_id} y los parámetros de path de tienda y caja son eliminados. La identidad proviene del Access Token y la caja es identificada por el campo config.qr.external_pos_id en el body. Sigue los pasos a continuación para adaptar la solicitud, la respuesta y el tratamiento de errores.

La API de Órdenes presenciales V2 retornaba HTTP 204 No Content sin body, lo que hacía imposible obtener el id del pedido para operaciones posteriores. La API de Orders retorna 201 Created con el objeto completo de la order. El campo id del response es necesario para consultas, cancelaciones y reembolsos posteriores.

Actualizar la consulta de orders

El endpoint de consulta cambia de GET /instore/qr/seller/collectors/{user_id}/pos/{external_pos_id}/ordersAPI a GET /v1/orders/{order_id}API. En la API de Órdenes presenciales V2, la consulta era realizada por caja (external_pos_id), retornando la order activa en esa caja sin exponer el estado de la transacción. La API de Orders sustituye el endpoint de consulta por caja por un endpoint que opera directamente por el order_id y retorna el estado completo de la transacción: status, pagos, reembolsos y datos del medio de pago. En la API de Órdenes presenciales V2, esa información llegaba solo por notificación.

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 cambia de DELETE /mpmobile/instore/qr/{user_id}/{external_id}API a POST /v1/orders/{order_id}/cancelAPI. El método HTTP cambia de DELETE a POST, el {user_id} y el {external_id} salen del path, y la cancelación pasa a operar sobre el order_id. El response pasó de vacío (HTTP 204) al objeto completo de la order con status: "canceled" (HTTP 200).

En la API de Órdenes presenciales V2, la cancelación eliminaba la order activa asociada a la caja, una operación sobre la caja y no sobre la transacción individual. En la API de Orders, la cancelación opera directamente sobre la order por el order_id, sin depender de la caja en el path.

Implementar reembolsos con el endpoint dedicado

La API de Orders introduce el endpoint dedicado POST /v1/orders/{order_id}/refundAPI para reembolsos, que no existía en la API de Órdenes presenciales V2. Anteriormente, 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 es realizado directamente sobre la order.

Validar la migración

Después de aplicar los cambios, verifica que la integración opere 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 con el nuevo payload en el endpoint POST /v1/ordersAPI y el campo id capturado del response.

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

Status de orders monitoreados 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.

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.