App Store Refund Management

Apple CONSUMPTION_REQUEST explicado: una guía paso a paso del flujo de reembolsos para desarrolladores de apps

Descubre cómo el consumption_request de Apple ayuda a los desarrolladores de apps a gestionar solicitudes de reembolso, responder a Apple y optimizar el flujo de reembolsos.

5 min read
Apple CONSUMPTION_REQUEST explicado: una guía paso a paso del flujo de reembolsos para desarrolladores de apps

Imagina esto. Un cliente compra tu plan anual, lo usa durante una semana y luego le pide a Apple que le devuelvan su dinero. Te enteras cuando tu pago llega más bajo de lo esperado. Nadie te preguntó nada. O eso parece.

De hecho, Apple suele preguntar. Envía a tu servidor un mensaje llamado CONSUMPTION_REQUEST, y quiere saber cómo usó realmente el cliente lo que compró. Si tu servidor no está escuchando, Apple decide sin ti. Esta guía recorre el proceso de reembolso de la App Store para desarrolladores, paso a paso, y señala dónde suele atascarse la gente. Para una mirada más amplia sobre la defensa de reembolsos en iOS, la página de defensa de reembolsos de la App Store de RefundSensor también lo cubre.

Respuesta rápida

Una notificación CONSUMPTION_REQUEST es la forma en que Apple solicita detalles de uso cuando un cliente pide un reembolso. Si el cliente aceptó compartir sus datos, tu servidor debe llamar a la Send Consumption Information Axz`PI dentro de las 12 horas y reportar la entrega y el uso. Apple pondera esa información y toma la decisión final. No puedes aprobar un reembolso ni garantizar el resultado.

¿Qué es Apple CONSUMPTION_REQUEST?

CONSUMPTION_REQUEST es un tipo de notificación dentro de App Store Server Notifications V2. Apple la envía cada vez que un cliente inicia una solicitud de reembolso, y cubre todos los tipos de producto: consumibles, no consumibles, suscripciones no renovables y suscripciones de renovación automática.

Piénsalo como una pregunta, no como una orden. Apple no te está diciendo que reembolses a nadie. Te está preguntando lo que sabes. Apple sigue tomando la decisión final, y tu respuesta es solo uno de los factores que considera.

Cómo funciona el flujo de reembolsos de Apple

Aquí ocurren dos cosas, y la gente las confunde. Recibir la notificación es automático. Enviar de vuelta la información de consumo solo ocurre si tu servidor lo hace.

  1. El cliente le pide a Apple un reembolso.

  2. Apple envía un CONSUMPTION_REQUEST a tu URL de notificaciones V2.

  3. Tu servidor verifica si ese cliente aceptó compartir sus datos de uso.

  4. Si lo hizo, tu servidor envía los detalles de consumo dentro de las 12 horas.

  5. Apple toma su decisión. Si otorga el reembolso, sigue una notificación REFUND.

Guía de implementación paso a paso

Aquí tienes la configuración de principio a fin.

  1. Agrega tu URL de notificaciones. En App Store Connect, ingresa la URL HTTPS de tu servidor y elige la versión 2.

  2. Responde rápido. Contesta con un estado entre 200 y 206. Un 40x o 50x hace que Apple reintente.

  3. Verifica la firma. Los payloads de V2 vienen firmados. Verifícalos antes de leer cualquier cosa dentro.

  4. Encuentra al cliente. Relaciona la transacción con un usuario de tu propia base de datos.

  5. Verifica el consentimiento. Sin consentimiento, no hay respuesta.

  6. Llama a la API. Envía los datos con una solicitud a la App Store Server API, autenticada con una clave de compras dentro de la app (In-App Purchase) de App Store Connect.

  7. Regístralo. Lleva un registro de qué enviaste y cuándo.

Cómo responder a una solicitud de reembolso de Apple como desarrollador

Siempre comienza con el consentimiento. Después, cuéntale a Apple lo que realmente pasó. El valor aquí viene de datos específicos y honestos, así que no los infles.

Toma dos casos.

  • Un jugador compra un paquete de monedas y gasta la mayoría en un día. Reporta el uso intensivo. Pedirle a Apple que rechace el reembolso es una preferencia razonable.

  • Un suscriptor paga por un año, pero tu servidor estaba caído y el contenido nunca cargó. Reporta que no se entregó. Aquí, otorgar el reembolso puede ser la respuesta honesta.

Tu preferencia de reembolso es una sugerencia. Apple no está obligada a seguirla.

La API Send Consumption Information de Apple, explicada

El endpoint Send Consumption Information es una solicitud PUT vinculada a un ID de transacción (/inApps/v2/transactions/consumption/{transactionId}). Lo llamas después de que llega un CONSUMPTION_REQUEST, y Apple quiere la respuesta dentro de las 12 horas.

El cuerpo es un objeto ConsumptionRequest con cinco campos:

  • customerConsented: ¿el cliente aceptó compartir sus datos? Tiene que ser true. De lo contrario, Apple rechaza la llamada con un error HTTP 400.

  • deliveryStatus: ¿tu app entregó una compra funcional?

  • sampleContentProvided: ¿ofreciste antes una muestra o prueba gratuita?

  • consumptionPercentage: cuánto se usó, en miliunidades.

  • refundPreference: el resultado que preferirías.

Algunas reglas suelen atrapar a la gente. Si deliveryStatus no es DELIVERED, configura consumptionPercentage en 0 o la solicitud fallará. Para una suscripción de renovación automática con GRANT_PRORATED, omite consumptionPercentage, ya que Apple lo calcula por su cuenta. Y el consentimiento depende de ti. Apple también indica que no uses el aviso de App Tracking Transparency para esto.

Integración de App Store Server Notifications V2

App Store Server Notifications V2 es la forma en que Apple contacta a tu servidor. Necesitarás una URL HTTPS segura que admita TLS 1.2 o una versión posterior.

CONSUMPTION_REQUEST es solo uno de muchos tipos. Otros, como REFUND y REFUND_REVERSED, te indican cómo terminó un caso. Dale a cada tipo su propio manejador para que el código de reembolsos no se mezcle con el código de renovaciones. ¿Quieres ver en acción el lado de App Store Connect? La guía de configuración de Apple de Refund Sensor cubre las claves y la URL de notificaciones.

Errores comunes que debes evitar

  • Quedarte solo en la notificación. Un CONSUMPTION_REQUEST no hace nada hasta que tu servidor envía datos de vuelta.

  • Ignorar el consentimiento. Sin acuerdo del cliente, no hay respuesta.

  • Dejar pasar las 12 horas. Estas notificaciones llegan de noche y los fines de semana. Usa una cola y configura alertas.

  • Enviar combinaciones que no funcionan. Un porcentaje de uso en una compra que no se entregó fallará.

  • Saltarte la verificación de la firma. Primero verifica, luego confía.

  • Responder lento. Devuelve un código de éxito rápidamente y haz el trabajo pesado en segundo plano, o Apple seguirá reintentando.

  • No tener forma de encontrar al usuario. Si no puedes vincular una transacción con un cliente, no tienes nada real que reportar.

Cómo automatizar los flujos de reembolso de la App Store

Nadie quiere vigilar un reloj de 12 horas a mano. Si quieres automatizar los flujos de reembolso de la App Store, divide la tarea en partes pequeñas:

  1. Acepta la notificación y devuelve de inmediato un código de éxito.

  2. Coloca el evento en una cola.

  3. Un worker lo verifica, encuentra al usuario y verifica el consentimiento.

  4. El worker arma la solicitud con los datos de uso almacenados y llama a la API.

  5. Registra el resultado y alerta a alguien si falla.

Obtienes respuestas consistentes, un registro de auditoría claro y nadie despierto a las 3 a. m. Puedes construir esto tú mismo o entregar el proceso a un servicio como RefundSensor.

Mejores prácticas para desarrolladores

  • Almacena datos reales de uso: sesiones, créditos gastados, contenido abierto. No puedes reportar números que nunca guardaste.

  • Agrega un paso de consentimiento claro en tus términos o en el onboarding, y registra cuándo se otorgó.

  • Documenta tus reglas de reembolso una sola vez y llévalas a código, en lugar de decidir caso por caso.

  • Haz pruebas con notificaciones de sandbox antes de salir a producción.

  • Adjunta un token de cuenta a cada compra para poder identificar al comprador después. Esta guía de appAccountToken explica cómo hacerlo.

  • Revisa los resultados de los reembolsos una vez al mes. Picos extraños pueden señalar una función rota o un paywall confuso.

Conclusión

El flujo de reembolsos de Apple se reduce a dos partes. Apple envía el CONSUMPTION_REQUEST, y tú decides si responder. Si el cliente dio su consentimiento, envía datos honestos a través de la Send Consumption Information API dentro de las 12 horas. Apple sigue siendo quien decide.

Un buen primer paso: confirma que tu URL de notificaciones V2 esté activa y que tu servidor pueda relacionar una transacción con un usuario. Esas dos verificaciones ahorran muchos dolores de cabeza después.

Preguntas frecuentes

Es un mensaje V2 que Apple envía cuando un cliente solicita un reembolso. Te pide detalles sobre el uso del producto.

Apple pide una respuesta dentro de las 12 horas posteriores a la notificación.

Sí. Sin él, no respondas. Una solicitud con customerConsented configurado como algo distinto de true es rechazada.

No necesariamente. Apple usa tus datos para fundamentar su decisión, pero es quien decide.

Consumibles, no consumibles, suscripciones no renovables y suscripciones de renovación automática.

#Apple Consumption Request#Apple Refund Workflow#App Store Refund API#Apple In-App Purchases#Consumption Request API#App Developer Guide
Refund SensorRefund Sensor TeamRefund defense for App Store and Google Play developers