Todo reembolso por upgrade de assinatura é uma decisão da loja, não sua, e sai direto dos seus rendimentos
Quando um cliente passa para um nível superior, a loja emite um reembolso por upgrade de assinatura pelos dias não usados do plano antigo, e reduz seus rendimentos de forma automática. Veja como funcionam os reembolsos por upgrade na App Store e no Google Play, e por que a Apple mantém o valor fora do seu servidor.

Principais conclusões
- Um reembolso por upgrade de assinatura é automático. Quando um cliente passa para um nível superior no meio do ciclo, a loja credita ou reembolsa os dias não usados do plano antigo sem perguntar a você, e o dinheiro sai dos rendimentos que você já havia registrado.
- Na App Store, um upgrade entra em vigor imediatamente e a Apple reembolsa o valor proporcional da assinatura original. Um downgrade espera até a próxima data de renovação e não reembolsa nada.
- A Apple não envia ao seu servidor o valor do reembolso por upgrade. A transação de upgrade é marcada com isUpgraded, mas o campo de preço continua mostrando o preço cheio do novo nível, então a receita que você calcula a partir das App Store Server Notifications fica inflada.
- Os relatórios financeiros do App Store Connect são o único lugar onde um reembolso por upgrade proporcional é contabilizado. A equipe da Apple afirma que o valor não está disponível pela App Store Server API, pelas Notifications nem pelo StoreKit.
- O Google Play não devolve dinheiro ao cartão em um upgrade. Ele credita o tempo não usado ou cobra a diferença de preço, e qual das duas acontece depende do modo de substituição que você definir. O padrão é WITH_TIME_PRORATION.
- Um reembolso por upgrade não é um pedido de reembolso do cliente. Não há CONSUMPTION_REQUEST nem análise de chargeback, então não há janela de 12 horas ou 24 horas e nada a contestar. Você concilia, você não briga por isso.
- O modo de substituição é uma decisão de receita. O WITH_TIME_PRORATION entrega ao cliente tempo pago extra que você entrega ao custo do nível superior, enquanto o CHARGE_PRORATED_PRICE cobra a diferença agora, então o padrão errado vaza margem um upgrade de cada vez.
Um cliente toca em fazer upgrade, passa do seu nível de cinco dólares para o de dez dólares, e você registra uma venda maior. A loja faz outra coisa nesse mesmo momento, e você nunca a vê. Ela entrega a esse cliente um reembolso por upgrade de assinatura pelos dias que ele já havia pago no plano antigo, e esse dinheiro sai dos seus rendimentos. Ninguém perguntou a você. Na App Store você nem sequer vai encontrar o valor nos eventos que o seu servidor recebe.
Este não é o reembolso que você pode contestar. Não é um CONSUMPTION_REQUEST da Apple e não é uma análise de chargeback do Google Play. É rateio, embutido na forma como as duas lojas deixam as pessoas trocarem de plano, e ele roda sozinho toda vez que um assinante sobe de nível. Veja o que um reembolso por upgrade realmente é em cada loja, por que a Apple mantém o valor fora do seu servidor e quanto a configuração errada do Google Play custa a você.
O que é de fato um reembolso por upgrade de assinatura
Um reembolso por upgrade é a loja acertando as contas pelo tempo que o cliente pagou mas não vai usar. Não tem nada a ver com uma reclamação, uma disputa ou a sua política de reembolsos. Ele dispara apenas pela mecânica da troca de plano.
É rateio, não uma reclamação do cliente
Quando um assinante passa para um nível superior no meio de um período de cobrança, ele já pagou até o fim daquele período pelo preço antigo. A loja o compensa pela parte não usada. A Apple emite um reembolso proporcional da assinatura original. O Google Play credita o valor não usado no novo plano. Nenhum dos dois passa por um fluxo ao qual você possa responder, e nenhum dos dois espera a sua aprovação.
Só um upgrade dispara isso
A direção da troca decide o dinheiro. Na App Store, um upgrade é uma passagem para um produto de posição mais alta no mesmo grupo de assinaturas, e só essa passagem é imediata e reembolsada. Um downgrade é uma passagem para uma posição mais baixa, e entra em vigor na próxima renovação sem reembolso. Um crossgrade é uma passagem entre produtos da mesma posição, e o seu momento depende das durações envolvidas. Ordene os produtos de forma errada no App Store Connect e uma troca que você acha que é um upgrade vai se comportar como outra coisa.
| Troca na App Store | Quando entra em vigor | O que acontece com o dinheiro |
|---|---|---|
| Upgrade para um nível superior | Imediatamente | A Apple reembolsa o valor proporcional da assinatura original |
| Downgrade para um nível inferior | Na próxima data de renovação | Sem reembolso, renova pelo preço mais baixo |
| Crossgrade, mesma duração paga adiantada | Imediatamente | Uma nova assinatura começa, o serviço pago continua |
| Crossgrade, durações diferentes | Na próxima data de renovação | Sem reembolso no meio do ciclo |
Por que a App Store esconde o reembolso por upgrade do seu servidor
Aqui está a parte que quebra o relatório de receita. A Apple emite o reembolso por upgrade, mas nunca diz ao seu servidor quanto reembolsou.
isUpgraded é o único sinal, e o preço está errado
A nova transação chega com isUpgraded definido como true, o que informa que houve uma troca de plano. O campo de preço nessa transação continua mostrando o preço de exibição cheio do novo nível, não o valor que a Apple recuperou do antigo. Nenhuma App Store Server Notification carrega o número do reembolso. Nas próprias palavras da Apple nos fóruns de desenvolvedores, o valor do reembolso proporcional não está disponível pela App Store Server API, pelas Notifications nem pelo StoreKit, e o relatório do App Store Connect é a sua fonte para todos os fins de contabilidade financeira.
O relatório financeiro é o único registro honesto
Os relatórios financeiros e de vendas do App Store Connect contabilizam o reembolso por upgrade proporcional, porque esses relatórios definem o que a Apple de fato paga a você. Isso os torna a fonte de verdade para qualquer assinante que já tenha subido de nível. Monte a sua contabilidade a partir dos relatórios, e trate os eventos do servidor como sinais de direito de acesso, não como receita.

Quanto isso custa a você, em dinheiro
O reembolso por upgrade não é um erro de arredondamento. São rendimentos reais, e no Google Play você ainda escolhe quanto do tempo não usado você dá de graça.
O reembolso são rendimentos que você já havia registrado
Pegue um assinante do seu nível de 9.99 por mês que faz upgrade para 19.99 no dia 20 de um ciclo de 30 dias. Cerca de um terço do mês fica sem uso, então a Apple reembolsa cerca de 3.33 dos 9.99 originais. Você não perde a venda toda. Você devolve a parte que o cliente pagou adiantado e não vai usar. O que importa é que a devolução é automática e recai sobre a venda antiga, então os rendimentos que você já havia contado encolhem depois. Multiplique isso por cada assinante que sobe de nível no meio do ciclo e é uma linha que você deveria conseguir enxergar, não uma lacuna que você descobre no repasse.
No Google Play, o modo de substituição é a verdadeira alavanca de custo
O Google Play não reembolsa dinheiro ao cartão em um upgrade. Ele acerta o tempo não usado de uma entre várias formas, e você escolhe qual passando um modo de substituição ao iniciar o fluxo de compra. A escolha decide se você entrega ao cliente tempo pago ou cobra a diferença dele. O Google recomenda CHARGE_PRORATED_PRICE para upgrades e DEFERRED para downgrades, mas o padrão da biblioteca é WITH_TIME_PRORATION, então um fluxo que você nunca configurou está creditando tempo em silêncio.
| Modo de substituição do Google Play | Quando entra em vigor | O que acontece com o tempo não usado |
|---|---|---|
| WITH_TIME_PRORATION (padrão) | Imediatamente | Creditado como tempo extra no novo plano, a próxima data de cobrança é adiada |
| CHARGE_PRORATED_PRICE (só upgrade) | Imediatamente | A diferença de preço do período restante é cobrada agora, a data de cobrança não muda |
| WITHOUT_PRORATION | Imediatamente | Nada é acertado agora, o novo preço começa na próxima renovação |
| CHARGE_FULL_PRICE | Imediatamente | O preço cheio do novo plano é cobrado agora, o valor restante é transferido ou rateado |
| DEFERRED | Na próxima renovação | O plano atual segue até expirar, depois o novo plano começa |
Como evitar que os reembolsos por upgrade surpreendam a sua contabilidade
Você não pode desligar o rateio, e nem iria querer, porque é o que torna uma troca de plano justa para o cliente. O que você pode fazer é enxergá-lo, precificá-lo e mantê-lo separado dos reembolsos que você de fato pode contestar.
Concilie os upgrades da Apple com o relatório financeiro
Como o valor do reembolso nunca chega ao seu servidor, os relatórios financeiros e de vendas do App Store Connect são o único lugar onde um reembolso por upgrade proporcional aparece. Concilie a receita por assinante com esses relatórios a cada período, e não calcule a receita a partir de um total acumulado de Server Notifications. A marca isUpgraded informa que houve uma troca. O relatório informa quanto ela custou.
Escolha o modo de substituição do Google Play de propósito
Passe um modo de substituição para cada troca de plano de forma deliberada. Use CHARGE_PRORATED_PRICE quando quiser cobrar a diferença de preço agora em um upgrade. Deixe WITH_TIME_PRORATION no lugar só quando a sua intenção for dar ao cliente o tempo restante. Use DEFERRED para downgrades para manter a receita atual até o prazo acabar. O padrão é uma decisão, e o padrão errado dá margem de graça um upgrade de cada vez.
Mantenha os reembolsos por upgrade separados dos reembolsos que você pode contestar
Um reembolso por upgrade é automático e definitivo por design. Não é um cliente pedindo o dinheiro de volta. Os reembolsos em que você de fato pode influir são os iniciados pelo cliente, em que a Apple envia um CONSUMPTION_REQUEST e dá 12 horas para você responder, e em que o Google Play abre uma análise de chargeback pelo orders.reviewrefund com uma janela de 24 horas. Marque os seus dados para que os dois nunca se misturem. Uma linha você concilia. A outra linha você responde, contra o relógio.
A versão curta
Quando um cliente faz upgrade de uma assinatura, a loja acerta o tempo não usado para ele de forma automática. A Apple reembolsa o valor proporcional do plano antigo imediatamente e nunca envia o número ao seu servidor, então os relatórios financeiros do App Store Connect são o único registro exato. O Google Play credita o tempo ou cobra a diferença dependendo do modo de substituição que você definir, e o padrão entrega ao cliente tempo pago que você entrega a custo. Nada disso passa por um CONSUMPTION_REQUEST ou por uma análise de chargeback, então não há nada a contestar. Concilie o reembolso por upgrade, defina o seu modo do Google Play de propósito e mantenha-o separado dos reembolsos pelos quais você ainda pode brigar.
Perguntas frequentes
- Um reembolso por upgrade de assinatura pede a minha aprovação?
- Não. Um reembolso por upgrade de assinatura é automático. Quando um cliente passa para um nível superior no meio do ciclo, a loja acerta o tempo não usado do plano antigo por conta própria, sem nenhum pedido a você e sem janela para responder. A Apple reembolsa o valor proporcional da assinatura original, e o Google Play credita o tempo não usado ou cobra a diferença de preço dependendo do modo de substituição que você definir.
- Por que a minha receita da App Store não bate com o meu repasse depois dos upgrades?
- Porque a Apple não envia ao seu servidor o valor do reembolso por upgrade. A transação de upgrade carrega isUpgraded definido como true, mas o campo de preço continua mostrando o preço cheio do novo nível, e nenhuma App Store Server Notification inclui o reembolso. A receita calculada a partir dos eventos do servidor conta a nova venda e deixa de fora o reembolso do plano antigo, então ela fica inflada até você conciliar com os relatórios financeiros do App Store Connect.
- O Google Play devolve dinheiro ao cartão quando um cliente faz upgrade?
- Não. O Google Play trata o tempo não usado como um crédito, não como um reembolso em dinheiro. Dependendo do modo de substituição, ele credita o tempo restante no novo plano e adia a próxima data de cobrança, ou cobra a diferença de preço do período restante. O modo padrão é WITH_TIME_PRORATION, que credita o tempo.
- Posso contestar um reembolso por upgrade de assinatura?
- Não. Um reembolso por upgrade não é um pedido de reembolso do cliente. Não há CONSUMPTION_REQUEST da Apple e não há análise de chargeback do Google Play, então não há janela de 12 horas ou 24 horas e nada a enviar. Um reembolso por upgrade você concilia. Você só contesta reembolsos e chargebacks iniciados pelo cliente.
- Um downgrade dá um reembolso ao cliente?
- Não. Na App Store, um downgrade entra em vigor na próxima data de renovação e não reembolsa nada, já que o cliente mantém o nível superior até o período pago terminar. No Google Play, a forma recomendada de lidar com um downgrade é o modo de substituição DEFERRED, que mantém o plano atual até ele expirar e então inicia o inferior.
- Qual modo de substituição do Google Play devo usar para um upgrade?
- O Google recomenda CHARGE_PRORATED_PRICE para upgrades, que cobra a diferença de preço do período restante imediatamente e deixa a data de cobrança sem alteração. O padrão WITH_TIME_PRORATION, em vez disso, credita o tempo não usado como serviço extra no nível superior, então use-o só quando a sua intenção for dar esse tempo de graça.
Fontes e leituras adicionais
- Apple Developer: Auto-renewable subscriptions (upgrade, downgrade, and crossgrade behavior and prorated refunds)
- Apple Developer Forums: Retrieving the prorated refund amount after an upgrade (Apple staff on isUpgraded, the price field, and financial reports as the source)
- Android Developers: BillingFlowParams.SubscriptionUpdateParams.ReplacementMode (all replacement mode constants)
- Android Developers: About subscriptions (proration, default replacement mode, upgrade and downgrade recommendations)
- Google Play Developer API: Method orders.reviewrefund (chargeback review, 24 hours)
- Apple Developer: Send Consumption Information (CONSUMPTION_REQUEST response window)
RefundHalt
O piloto automático de reembolsos para App Store e Google Play
Continue lendo
Compras no aplicativo feitas por crianças sem autorização são reembolsadas ao responsável quase sempre, e o custo fica com você
Quando uma criança compra um pacote de moedas no telefone de um responsável, tanto a Apple quanto o Google reembolsam, e nenhum dos dois pergunta a você antes. Os reguladores fizeram assim. Veja como esses reembolsos de compras no aplicativo não autorizadas funcionam em cada loja, a janela de 15 minutos por onde o dinheiro vai, e quanto uma delas realmente custa a você.
Você nunca foi dono do app refund tax, então um reembolso custa a sua parcela, não o total do recibo
Reembolse uma compra no aplicativo e o recibo mostra o preço mais o imposto voltando. O imposto nunca foi o seu dinheiro. Apple e Google o cobram e repassam como merchant of record e depois o revertem em um reembolso sem tocar na sua parcela. Aqui está o que um reembolso realmente custa e a única configuração em que o imposto se torna seu.