📦 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:
- ¿Las cuentas TESTUSER tienen alguna restricción para crear refunds vía REST API aunque sí puedan hacerlo desde la UI?
- ¿Existe alguna diferencia de autorización entre la UI de Mercado Pago y la API REST para refunds?
- ¿Existe algún scope, permiso o configuración adicional necesario para habilitar refunds vía API en cuentas de prueba?
- ¿Los refunds vía API solamente están soportados para cuentas reales/productivas?
- ¿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
📦 SDK Version
2.12.0
🌎 Country
Mexico (MLM)
🖥️ Environment Details
No response
❓ Your Question
Refund funciona desde la UI de Mercado Pago pero
POST /refundsdevuelve 401 para la misma cuenta TESTUSERHola 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
TESTUSERen México (MLM) usando credencialesAPP_USR.Con el mismo Access Token:
GET /users/mefunciona correctamenteGET /v1/payments/{id}funciona correctamenteGET /v1/payments/{id}/refundsfunciona correctamentecollector_idcoincide con el usuario autenticadoapprovedlive_mode=trueSin embargo, al intentar crear un refund vía API:
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:
GET /refundslo devuelve comoapprovedsource.idcoincide)Entonces pareciera que:
401Lo 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:
Unauthorized use of live credentialspuede aparecer aun cuando el token y elcollector_idson correctos?Reproducción
Ejemplo usando SDK oficial
Ejemplo usando REST API directa
Resultado esperado
El refund debería:
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:
approvedRefund vía REST API → falla
Usando:
la API continúa devolviendo:
{ "message": "Unauthorized use of live credentials", "status": 401 }Esto ocurre:
X-Idempotency-KeyDatos técnicos
payment.live_mode = trueSi ayuda, también podemos compartir:
Muchas gracias por su apoyo. Principalmente queremos confirmar si estamos entendiendo correctamente el comportamiento esperado de refunds para cuentas TESTUSER.
💻 Code Example (optional)
✅ Checklist