Skip to content

[QUESTION]: Refund works from MercadoPago UI but POST /refunds returns 401 for same TESTUSER account #419

@Pxngel

Description

📦 SDK Version

2.12.0

🌎 Country

Mexico (MLM)

🖥️ Environment Details

No response

❓ Your Question

Refund funciona desde la UI de Mercado Pago pero POST /refunds devuelve 401 para la misma cuenta TESTUSER

Hola equipo de Mercado Pago,

Estamos integrando refunds para Checkout Pro usando el SDK oficial de Node.js y encontramos un comportamiento que no logramos entender del todo. Queremos confirmar si estamos haciendo algo incorrecto o si existe alguna limitación específica para cuentas TESTUSER.

Este comportamiento es reproducible tanto usando el SDK oficial como haciendo llamadas REST directas con cURL.

Contexto

Estamos trabajando con una cuenta TESTUSER en México (MLM) usando credenciales APP_USR.

Con el mismo Access Token:

  • GET /users/me funciona correctamente
  • GET /v1/payments/{id} funciona correctamente
  • GET /v1/payments/{id}/refunds funciona correctamente
  • el collector_id coincide con el usuario autenticado
  • el pago está approved
  • el pago tiene live_mode=true

Sin embargo, al intentar crear un refund vía API:

POST /v1/payments/{id}/refunds

la respuesta es consistentemente:

{
  "message": "Unauthorized use of live credentials",
  "error": "unauthorized",
  "status": 401,
  "cause": [
    {
      "code": 7
    }
  ]
}

Lo que nos genera duda

Lo que nos confundió es que iniciando sesión manualmente en la web de Mercado Pago con esa misma cuenta TESTUSER, sí pudimos generar el refund desde la UI sin problema.

Después de hacerlo:

  • el refund aparece correctamente
  • GET /refunds lo devuelve como approved
  • el refund quedó asociado al mismo usuario (source.id coincide)

Entonces pareciera que:

  • la cuenta sí tiene capacidad de generar refunds
  • pero específicamente el endpoint REST queda bloqueado con 401

Lo que queremos confirmar

Más que asumir que se trata de un bug, queremos entender si este comportamiento es esperado para cuentas TESTUSER.

Las dudas concretas serían:

  1. ¿Las cuentas TESTUSER tienen alguna restricción para crear refunds vía REST API aunque sí puedan hacerlo desde la UI?
  2. ¿Existe alguna diferencia de autorización entre la UI de Mercado Pago y la API REST para refunds?
  3. ¿Existe algún scope, permiso o configuración adicional necesario para habilitar refunds vía API en cuentas de prueba?
  4. ¿Los refunds vía API solamente están soportados para cuentas reales/productivas?
  5. ¿El error Unauthorized use of live credentials puede aparecer aun cuando el token y el collector_id son correctos?

Reproducción

Ejemplo usando SDK oficial

import { MercadoPagoConfig, Refund } from 'mercadopago';

const client = new MercadoPagoConfig({
  accessToken: process.env.MP_ACCESS_TOKEN!,
});

const refundClient = new Refund(client);

async function testRefund() {
  try {
    const response = await refundClient.create({
      payment_id: 157690141947,
      body: {
        amount: 1,
      },
      requestOptions: {
        idempotencyKey: crypto.randomUUID(),
      },
    });

    console.log(response);
  } catch (error: any) {
    console.error(JSON.stringify(error, null, 2));
  }
}

testRefund();

Ejemplo usando REST API directa

curl -X POST "https://api.mercadopago.com/v1/payments/157690141947/refunds" \
  -H "Authorization: Bearer <ACCESS_TOKEN>" \
  -H "Content-Type: application/json" \
  -H "X-Idempotency-Key: 7c8f2c1a-0f44-4e0d-9f6d-0f9cb9e4d123" \
  -d '{"amount":1}'

Resultado esperado

El refund debería:

  • crearse correctamente
  • o devolver un error de negocio indicando por qué el pago no puede ser reembolsado

Resultado actual

{
  "message": "Unauthorized use of live credentials",
  "error": "unauthorized",
  "status": 401,
  "cause": [
    {
      "code": 7
    }
  ]
}

Evidencia adicional

Refund desde UI de Mercado Pago → funciona

Usando la misma cuenta TESTUSER directamente desde la UI:

  • el refund se creó correctamente
  • el refund quedó en estado approved

Refund vía REST API → falla

Usando:

POST /v1/payments/{id}/refunds

la API continúa devolviendo:

{
  "message": "Unauthorized use of live credentials",
  "status": 401
}

Esto ocurre:

  • usando el SDK oficial de Node.js
  • usando cURL directamente
  • incluso enviando correctamente X-Idempotency-Key

Datos técnicos

  • Site: MLM
  • SDK: mercadopago (Node.js)
  • Backend: NestJS
  • Tipo de credencial: APP_USR
  • payment.live_mode = true

Si ayuda, también podemos compartir:

  • request IDs
  • timestamps
  • payloads completos
  • logs del SDK
  • IDs de pagos/refunds

Muchas gracias por su apoyo. Principalmente queremos confirmar si estamos entendiendo correctamente el comportamiento esperado de refunds para cuentas TESTUSER.

💻 Code Example (optional)

✅ Checklist

  • I have searched existing issues
  • I have checked the official documentation
  • I have removed sensitive information (tokens, credentials, etc)

Metadata

Metadata

Labels

questionInquiry about SDK usage, configuration, or best practices.

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions