Recursos para IA

Cómo migrar de la Instore Orders V2 API a la Orders API

La migración de la Instore Orders V2 API a la Orders API 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 Orders API 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 QR Code 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 Instore Orders V2 API, cada operación utilizaba una URL con el identificador del usuario, de la tienda y de la caja en el path. La Orders API 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 Instore Orders V2 API y la Orders API es el modelo de status. En la Instore Orders V2 API, 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 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 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 Orders API. 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 Instore Orders V2 API retornaba HTTP 204 No Content sin body, lo que hacía imposible obtener el id del pedido para operaciones posteriores. La Orders API 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 Instore Orders V2 API, 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 Orders API 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 Instore Orders V2 API, 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 /instore/qr/seller/collectors/{user_id}/pos/{external_pos_id}/ordersAPI 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 Instore Orders V2 API, 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 Orders API, 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 Orders API introduce el endpoint dedicado POST /v1/orders/{order_id}/refundAPI para reembolsos, que no existía en la Instore Orders V2 API. 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.