El abuso reiterado de reembolsos te cuesta dos veces, así es como las tiendas te dejan defenderte
El cliente que reembolsa una y otra vez no es un accidente. El abuso de reembolsos te cuesta el dinero devuelto más el cómputo que ya gastaste, y ambas tiendas te entregan una señal de identidad, el appAccountToken de Apple y el ID de cuenta ofuscado de Google, para unir el patrón.

Puntos clave
- Solo dos flujos de reembolso permiten a un desarrollador presentar pruebas contra el abuso de reembolsos: el CONSUMPTION_REQUEST de Apple, con una ventana de 12 horas, y la revisión de contracargos de Google Play mediante la Review Refund API, con una ventana de 24 horas.
- El appAccountToken de Apple es un UUID que tú generas y adjuntas a una compra, y StoreKit lo vincula a la transacción resultante, de modo que tu servidor puede rastrear cada reembolso hasta la cuenta exacta que lo hizo.
- El ID de cuenta ofuscado de Google Play es una cadena con hash, limitada a 64 caracteres, que la propia Google usa para detectar actividad irregular, como muchos dispositivos comprando en una sola cuenta en un lapso breve.
- Guardar datos personales en texto plano en el ID de cuenta ofuscado de Google hace que se bloqueen tus compras, así que el campo debe ser un valor cifrado o un hash de un solo sentido, nunca un correo electrónico sin procesar.
- El campo voidedReason de Google Play marca friendly_fraud y fraud como motivos distintos de un reembolso ordinario de tipo remorse, lo que te permite enviar a los abusadores reincidentes a una cola de revisión en lugar de una ruta automática de reembolsar y olvidar.
- Google dice que bloqueó más de 2000 millones de dólares en transacciones fraudulentas y abusivas en 2022, y los campos de identidad que alimentan ese sistema solo funcionan si los rellenas en cada compra.
- Cada compra reembolsada que conserva su acceso es cómputo, almacenamiento y gasto de API que sigues pagando sobre un dinero que ya devolviste, y un reembolsador reincidente multiplica esa factura a propósito.
Un solo reembolso es un costo de hacer negocios. La misma cuenta reembolsando por cuarta vez, después de usar lo que compró cada vez, es abuso de reembolsos, y es un patrón que solo puedes ver si cada compra lleva una identidad que tú controlas. Apple y Google te dan esa identidad, y ambos te dan una ventana estrecha para ponerla delante de la tienda antes de que se decida un reembolso o un contracargo. Pierde la ventana, o nunca adjuntes la identidad, y un reembolsador reincidente se ve exactamente igual que un cliente descontento por primera vez. Aquí te explicamos cómo distinguirlos, y cuánto vale esa diferencia en dinero.
Por qué el abuso de reembolsos es un problema de identidad, no de reembolsos
La tienda decide el reembolso. No puedes impedir que un cliente lo pida, y en la mayoría de los flujos no puedes impedir que la tienda lo conceda. Lo que sí puedes hacer es decidir si una cuenta determinada ya hizo esto antes, y si el contenido que compró fue realmente entregado y usado. Ambas son preguntas sobre identidad: cuál de tus usuarios está detrás de esta transacción, y cuál es su historial. Si tus compras no llevan un identificador estable de vuelta a tus propios registros de usuario, no puedes responder ninguna de las dos, y cada reembolso llega sin contexto.
Esa es la verdadera brecha. La mecánica del reembolso está fijada por la política. Las pruebas que aportas son enteramente tuyas para construir, y empiezan en el momento de la compra, no en el momento del reembolso.
Las dos ventanas donde las pruebas cambian el resultado
Hay exactamente dos flujos donde algo que envías puede mover una decisión. El CONSUMPTION_REQUEST de Apple se dispara cuando un cliente pide un reembolso de un consumible o una suscripción de renovación automática, y tienes 12 horas para responder. La revisión de contracargos de Google Play se dispara cuando un usuario disputa un cargo con su banco, y tienes 24 horas para responder mediante la Review Refund API. Cualquier otro reembolso, el reembolso de autoservicio de 48 horas de Play, un reembolso concedido por soporte, un reembolso automático por compra no reconocida, se decide sin ti.
Ambos canales de prueba son mucho más sólidos cuando la transacción ya lleva tu identificador. La información de consumo de Apple puede incluir el appAccountToken junto con el historial y el gasto de la cuenta, y la revisión de Google puede apoyarse en el ID de cuenta ofuscado que ha estado observando desde la compra. Una cuenta sin identificador es una cuenta sin historial que presentar.
Los dos campos de identidad, uno al lado del otro
Apple y Google resolvieron el mismo problema casi de la misma manera, con nombres distintos y reglas distintas. Ambos te permiten estampar una compra con un valor que apunta de vuelta a tu propio registro de usuario. Ninguno está activo por defecto. Ambos son inútiles si no los estableces en el momento de la compra.
Apple: appAccountToken
appAccountToken es un UUID que generas y pasas cuando comienza una compra. StoreKit lo asocia con la transacción resultante, y aparece en los datos de la transacción que tu servidor verifica y en la información de consumo que devuelves durante un CONSUMPTION_REQUEST. Como es tu valor, mapea una transacción de la tienda directamente sobre la cuenta en tu base de datos, sin correo electrónico ni nombre de por medio. Tiene que ser un UUID real, y cualquier otra cosa se rechaza. Apple luego añadió un endpoint Set App Account Token que puede adjuntar o actualizar el token en transacciones pasadas, incluidas compras hechas fuera de tu app, como canjes de códigos de oferta.
Google Play: el ID de cuenta ofuscado
El equivalente de Google es setObfuscatedAccountId, una cadena opcional vinculada a la cuenta compradora. La propia documentación de Google es tajante sobre su propósito: Google Play lo usa para detectar actividad irregular, como muchos dispositivos haciendo compras en la misma cuenta en un lapso breve, y para bloquear algunas transacciones fraudulentas antes de que se completen. Está limitada a 64 caracteres, y no debe llevar datos personales en texto plano. Guarda ahí un correo electrónico sin procesar y Google bloquea la compra directamente, porque el campo espera un valor cifrado o un hash de un solo sentido. Un campo hermano, setObfuscatedProfileId, existe para apps donde una cuenta contiene varios perfiles.
| Campo | Tienda | Tipo y límite | Establecido por | Predeterminado | Qué hace la tienda con él |
|---|---|---|---|---|---|
| appAccountToken | Apple | UUID | Tú, en la compra | Sin establecer | Vincula la transacción a tu usuario, se devuelve en los datos de transacción y de consumo |
| obfuscatedAccountId | Google Play | Cadena con hash, máx. 64 caracteres | Tú, en la compra | Sin establecer | Detecta actividad irregular y bloquea algún fraude antes de completarse |
Cuánto cuesta realmente un reembolso de un abusador reincidente
El reembolso en sí es la parte más pequeña de la factura. Cuando una tienda concede un reembolso, devuelves los ingresos, y eso es lo visible en el libro de cuentas. Lo que no está en la línea del reembolso es todo lo que gastaste entregando el producto que ahora es gratis.
Imagina un consumible que desencadena trabajo real: una generación de imágenes, un lote de llamadas a la API de un proveedor de modelos, una exportación de video, un pago a un creador. Pagaste ese cómputo en el momento en que el cliente lo usó. El reembolso recupera el precio, pero no recupera la factura del proveedor. Un reembolsador reincidente es alguien que ha aprendido que el contenido sobrevive al reembolso, así que repite el bucle: compra, consume, reembolsa, repite. En cada ciclo, asumes el costo de entrega por segunda vez.
Luego está el propio traspaso de costos de la tienda. A partir del 3 de agosto de 2026, Google Play traslada el precio de compra y las comisiones de contracargo del banco al desarrollador para los pedidos realizados después de esa fecha. Un contracargo que antes era mayormente problema de Google se convierte en tus ingresos más una comisión, y un cargador reincidente aumenta esa cifra cada vez. Los campos de identidad son lo que te permite alimentar la Review Refund API con las pruebas para impugnar una disputa ilegítima dentro de la ventana de 24 horas.
Google plantea la escala sin rodeos: dice que bloqueó más de 2000 millones de dólares en transacciones fraudulentas y abusivas en 2022. Ese número existe porque las señales, el ID de cuenta ofuscado entre ellas, estaban rellenas. Una app que envía compras con campos de identidad vacíos renuncia a esa protección.

Cómo atrapar a los reembolsadores reincidentes antes de que la tienda decida
Etiqueta cada compra con una identidad que sea tuya
Establece appAccountToken en cada compra de StoreKit y setObfuscatedAccountId en cada compra de Play Billing, ambos generados a partir de tu propio registro de usuario. En Apple, usa un UUID real mapeado a la cuenta. En Google, aplica hash a la clave de la cuenta para que ningún dato personal viaje en texto plano. Hazlo en el momento de la compra, porque en Google es el único paso que no puedes recuperar después.
Mantén un libro de cuentas con clave en esa identidad
Guarda cada compra, entrega, evento de consumo y reembolso contra el identificador. Cuando llega un CONSUMPTION_REQUEST o una revisión de contracargo, el historial completo de la cuenta, reembolsos previos incluidos, está a una sola consulta de distancia. La información de consumo de Apple tiene campos explícitos justo para esto: consumptionStatus, deliveryStatus, playTime, accountTenure, lifetimeDollarsPurchased, y tu refundPreference.
Lee voidedReason y enruta a los abusadores de forma distinta
Cuando una compra de Google se anula, el campo voidedReason te dice por qué, y friendly_fraud y fraud son valores separados de un reembolso ordinario de tipo remorse. Enruta esos a una cola de revisión y a una política más estricta, no a la misma ruta automática que un reembolso por primera vez. La propia guía de Google es un modelo de varias advertencias: advierte a un primer infractor, toma medidas más firmes con los reincidentes, y desactiva las compras para una cuenta que insiste.
Responde a la ventana siempre
Las pruebas solo cuentan dentro de las dos ventanas. Automatiza la respuesta del CONSUMPTION_REQUEST para que se dispare bien dentro de las 12 horas, y la revisión de contracargo para que se dispare dentro de las 24. Un historial perfecto que envías tarde es un historial que la tienda nunca lee.
| Señal que quieres detectar | Dónde vive | El campo o flujo que la revela |
|---|---|---|
| Misma cuenta, muchos dispositivos, lapso breve | Google Play | Detección de actividad irregular del ID de cuenta ofuscado |
| Esta cuenta ya ha reembolsado antes | Tu libro de cuentas | Historial con clave en appAccountToken o el ID de cuenta ofuscado |
| El contenido fue entregado y consumido | Apple | deliveryStatus y consumptionStatus en la info de consumo |
| Una disputa es en realidad fraude de origen | Google Play | Valor friendly_fraud de voidedReason |
Qué harán y qué no harán las tiendas por ti
Vale la pena ser preciso sobre la división del trabajo, porque es fácil suponer que las tiendas se ocupan del abuso, y en su mayoría no te avisan cuando no lo hacen. Google usa activamente el ID de cuenta ofuscado para bloquear algún fraude antes de que se complete una compra, y sus sistemas atrapan una gran parte a nivel de plataforma. Apple decide cada reembolso por sí misma y trata tu información de consumo como una entrada, nunca un voto. Ninguna tienda mantiene tu lista de abusadores por ti, deduce un consumible reembolsado de tu saldo, ni le dice que no a un reembolsador reincidente en tu nombre. La identidad es de la tienda para actuar en los márgenes y tuya para actuar en todo lo demás.
Esta es la misma razón por la que RefundHalt basa todo en la identidad de la compra: un reembolso, una revisión de contracargo y una solicitud de consumo para la misma cuenta se resuelven en un solo historial, de modo que un reembolsador reincidente aparece como un patrón la primera vez que repite, no después de la cuarta factura que ya pagaste.
Preguntas frecuentes
- ¿Qué es el abuso de reembolsos en una app?
- El abuso de reembolsos es un cliente que pide reembolsos repetidamente después de recibir y usar lo que compró, de modo que conserva el contenido o el beneficio mientras recupera el dinero. En las tiendas de apps suele aparecer como la misma cuenta reembolsando consumibles o suscripciones una y otra vez, o como friendly fraud, donde un cargo legítimo se disputa con el banco.
- ¿Cómo vinculo una compra dentro de la app a un usuario específico?
- En Apple, genera un UUID y pásalo como appAccountToken cuando comienza la compra, y StoreKit lo vincula a la transacción y lo devuelve en los datos de transacción y consumo. En Google Play, llama a setObfuscatedAccountId con un valor con hash vinculado a la cuenta. Ambos mapean una transacción de la tienda a tu propio registro de usuario sin exponer datos personales.
- ¿Pueden Apple o Google decirme que una cuenta es un reembolsador reincidente?
- No directamente. Google usa el ID de cuenta ofuscado para detectar actividad irregular y bloquear algún fraude antes de la compra, y Apple te permite enviar el historial de la cuenta durante una solicitud de consumo, pero ninguna tienda te entrega una lista de reembolsadores reincidentes. Eso lo construyes tú mismo a partir de tu propio libro de cuentas con clave en los campos de identidad.
- ¿Por qué Google bloquea mi compra cuando establezco el ID de cuenta?
- Porque el ID de cuenta ofuscado no debe contener datos personales en texto plano. Guardar algo como una dirección de correo electrónico sin procesar en él hace que Google Play bloquee la compra. Usa un valor cifrado o un hash de un solo sentido, y mantenlo dentro del límite de 64 caracteres.
- ¿Impugnar reembolsos mediante la solicitud de consumo detiene el abuso?
- Puede reducirlo. El CONSUMPTION_REQUEST es uno de solo dos flujos donde tus pruebas llegan a la tienda antes de que decida, y el historial de la cuenta más los datos de entrega y consumo ayudan a Apple a identificar el abuso de devoluciones y el friendly fraud. Sin embargo, no es un bloqueo. Apple sigue decidiendo, y el abuso que llega por flujos no impugnables no se ve afectado.
Fuentes y lecturas adicionales
- Apple: appAccountToken (App Store Server API)
- Apple: ConsumptionRequest (App Store Server API)
- Android: BillingFlowParams.Builder.setObfuscatedAccountId
- Android: Fight fraud and abuse (Play Billing security)
- Google Play Developer API: Voided Purchases
- Google Play Billing: Provide refund and chargeback suggestions (Review Refund API)
- Android Developers Blog: Play Commerce prevented over $2 billion in fraudulent and abusive transactions in 2022
- Google Play Console Help: Updates to refund protection and chargeback cost responsibility
RefundHalt
El piloto automático de reembolsos para App Store y Google Play
Seguir leyendo
The refunds you cannot contest: what Apple and Google decide without asking you
Only two refund flows ever ask for your evidence: Apple's consumption request and Google Play's chargeback review. Everything else, the 48-hour Play refund, support refunds, voided purchases, unacknowledged trials, is decided without you. Here is the full map, what you can prevent, and what you can only record.
Apple's CONSUMPTION_REQUEST, explained: the 12 hours that decide your refund
When a customer asks Apple for a refund, Apple asks you first. Here's exactly what the CONSUMPTION_REQUEST notification contains, what Apple expects back, how to answer one end to end, and why most developers silently forfeit.