# Guideline 3.1.2 : application refusée pour son abonnement

> Guideline 3.1.2 : le montant facturé doit être le prix le plus visible du paywall, avec durée, renouvellement et liens CGU. Deux refus réels et leur correctif.

Page originale : [Guideline 3.1.2 : application refusée pour son abonnement](https://devoria.fr/blog/guideline-3-1-2-abonnement-app-store)
Auteur : [Mehdi Azizi](https://devoria.fr/mehdi-azizi)
Publication : 2026-10-17
Dernière révision du contenu : 2026-10-17


La guideline 3.1.2 encadre les abonnements auto-renouvelables. Si Apple la cite, vérifie deux choses : **le montant réellement facturé doit être le prix le plus visible de ton paywall**, et l'app comme sa fiche doivent donner la durée, le prix et des liens qui marchent vers tes conditions d'utilisation et ta politique de confidentialité.

J'ai reçu ce refus sur deux de mes apps en octobre 2026 : Solys le 10, TradaZen le 12. Le même affichage était en cause : un prix par semaine en gros, le vrai montant facturé en petit. Voici le texte de la règle, ces deux cas, puis la check-list que j'applique maintenant. Pour les autres motifs, lis [pourquoi Apple refuse une app](https://devoria.fr/blog/pourquoi-apple-refuse-votre-app).

## Que dit la guideline 3.1.2 ?

La 3.1.2, « Subscriptions », se trouve dans la section 3 « Business » des [App Review Guidelines](https://developer.apple.com/app-store/review/guidelines/#3.1.2), partie 3.1 « Payments ». D'où l'intitulé du mail : « Guideline 3.1.2 - Business - Payments - Subscriptions ». Elle compte trois alinéas, et **la lettre entre parenthèses te dit où chercher**.

| Alinéa                            | Ce qu'Apple exige                | Le refus typique                      |
| --------------------------------- | -------------------------------- | ------------------------------------- |
| 3.1.2(a) Permissible uses         | Valeur continue, 7 jours minimum | Abonnement sans contenu qui évolue    |
| 3.1.2(b) Upgrades and Downgrades  | Changer de formule sans doublon  | Deux formules payées à la fois        |
| 3.1.2(c) Subscription Information | Ce que l'on obtient, à quel prix | Prix calculé plus gros que le facturé |

Le texte de la [3.1.2(c)](https://developer.apple.com/app-store/review/guidelines/#3.1.2c) est court. Avant de demander à quelqu'un de s'abonner, tu dois « clearly describe what the user will get for the price » : décrire clairement ce qu'il obtient pour ce prix. Il renvoie ensuite à l'annexe 2 (Schedule 2) de la [licence du programme développeur](https://developer.apple.com/support/terms/apple-developer-program-license-agreement/#S2). Cette annexe liste ce que tu dois afficher « clearly and conspicuously », clairement et visiblement :

- le titre de l'abonnement ;
- sa durée ;
- son prix, et le prix par unité si c'est pertinent ;
- des liens vers ta politique de confidentialité et tes conditions d'utilisation, accessibles dans l'app.

La règle sur la taille des prix se trouve sur la [page d'Apple consacrée aux abonnements](https://developer.apple.com/app-store/subscriptions/). Dans le parcours d'achat, « the amount that will be billed must be the most prominent pricing element in the layout » : le montant qui sera débité doit être l'élément de prix le plus visible. Un équivalent par mois ou une économie restent permis, à condition d'être en position secondaire et plus petits. La même page demande, pour un essai gratuit, d'indiquer sa durée et le prix facturé à la fin.

## Les deux refus 3.1.2(c) que j'ai reçus

### Solys : 0,38 € en gros, 19,99 € en petit

Solys est mon réveil qui endort tes réseaux. Sur le paywall de l'onboarding, la carte « Annuel » affichait « 0,38 €/sem. » en 21 points et en gras. Dessous, en 15 points : « soit 19,99 €/an ». Or c'est 19,99 € qui est débité, pas 0,38 €.

Le 10 octobre 2026, Apple refuse la version en citant la 3.1.2(c). Le message demande que le montant facturé soit l'élément de prix le plus clair et le plus visible. L'essai gratuit, le prix de lancement et les prix calculés doivent lui rester subordonnés. Apple cite ses critères : la police, la taille, la couleur et l'emplacement.

J'avais gardé cet affichage en connaissance de cause : une version précédente de TradaZen, construite sur le même principe, avait été acceptée. C'était un pari, et il a coûté un cycle de revue.

**Le correctif** : « 19,99 €/an » en gros, « soit 0,38 €/sem. » en légende grise dessous, dans les 30 langues de l'app. Le paywall étant dans le code, il a fallu un nouveau build avant de renvoyer la version.

![Une balance pèse les deux prix du paywall de Solys, fondus en blocs de plomb. Avant, « 0,38 €/sem. » en 21 points l'emporte sur « soit 19,99 €/an » en 15 points et l'aiguille indique refusé ; après, « 19,99 €/an » en 21 points l'emporte et l'aiguille indique conforme.](https://devoria.fr/ios/figures/balance-3-1-2c.svg)

### TradaZen : le même motif, deux jours plus tard

TradaZen est mon simulateur de trading. Le 12 octobre 2026, la version 1.5.1 est refusée pour la même règle. Le message parle d'un prix « weekly calculated » affiché « more clearly and conspicuously than the billed amount » : l'équivalent par semaine était plus visible que le montant facturé.

Ma première correction n'a pas suffi, et je l'ai vu avant l'envoi. J'avais réduit « 0,92 €/sem » en le laissant à droite, sur la ligne du prix. Mais la carte de l'abonnement hebdomadaire affichait, dans la même colonne, son vrai prix : « 8,99 €/sem ». Les deux montants se lisaient au même rang. **Un prix calculé placé dans la colonne des vrais prix se lit comme un prix facturé**, même en petit.

**Le correctif retenu** : chaque carte porte son montant facturé en gros, à droite. Le prix par semaine passe en légende grise dessous. À gauche, seulement le nom de la formule. À la revue suivante, Apple n'a plus relevé la 3.1.2(c).

Les autres leçons de cette app sont dans l'[étude de cas TradaZen](https://devoria.fr/blog/etude-de-cas-tradazen-app-iphone).

## Ce qu'Apple a refusé, ce qui est passé

Voici les affichages réels, dans l'ordre, avec leur résultat.

| Affichage du prix                                                 | Résultat                       |
| ----------------------------------------------------------------- | ------------------------------ |
| TradaZen, version antérieure : prix par semaine en avant          | Accepté à une revue précédente |
| Solys : « 0,38 €/sem. » en gras, « 19,99 €/an » dessous           | Refusé le 10/10/2026, 3.1.2(c) |
| TradaZen 1.5.1 : prix par semaine plus visible que le facturé     | Refusé le 12/10/2026, 3.1.2(c) |
| TradaZen : prix par semaine réduit, mais dans la colonne des prix | Écarté par moi avant l'envoi   |
| TradaZen : facturé en gros à droite, semaine en légende           | Plus cité à la revue suivante  |
| Solys : « 19,99 €/an » en gros, semaine en légende grise          | Corrigé et renvoyé à Apple     |

La première ligne est la plus importante. **Une revue acceptée ne valide pas ton paywall pour la suivante.** Chaque version repasse devant un relecteur, qui peut lire la règle plus strictement que le précédent. Le seul affichage sûr est celui qui respecte le texte.

> Le montant débité est le seul prix en gros. Tout équivalent, par semaine, par mois ou par jour, est une légende plus petite et plus pâle, jamais à sa place.

## La check-list du paywall conforme 3.1.2

C'est la liste que je déroule maintenant sur chaque paywall de mes apps, avant chaque envoi :

- Sur chaque carte, le montant facturé est le prix le plus gros, le plus contrasté et le mieux placé.
- Tout prix calculé (par semaine, par mois, par jour) est en légende, plus petit et plus pâle, sous le montant facturé.
- Aucun prix calculé n'occupe la colonne où une autre formule affiche son vrai prix.
- La durée est écrite en clair : « par an », « par semaine ».
- L'essai gratuit dit sa durée et le montant facturé à la fin de l'essai.
- Une phrase dit que l'abonnement se renouvelle automatiquement et se résilie dans les réglages du compte Apple.
- Ce que l'abonnement débloque est écrit avant le bouton d'achat.
- Un bouton « Restaurer mes achats » est visible sur le paywall.
- Les liens vers les conditions d'utilisation et la politique de confidentialité sont sur le paywall et s'ouvrent.
- Si tu proposes plusieurs formules, elles sont dans un seul groupe d'abonnements, comme Apple le conseille.
- Le rendu est vérifié sur le plus petit iPhone et avec le prix le plus long. Sur TradaZen, je teste le prix en dong vietnamien : un montant qui passe à la ligne casse la hiérarchie.

Si tu utilises les paywalls de RevenueCat, la [documentation de RevenueCat](https://www.revenuecat.com/docs/tools/paywalls/creating-paywalls/app-review) fait la même mise en garde : une variable de prix mensuel seule ne suffit pas si le montant facturé et sa périodicité n'apparaissent pas ailleurs. Le branchement complet est dans [RevenueCat : mettre en place un abonnement in-app](https://devoria.fr/blog/revenuecat-abonnement-in-app-ios), et les erreurs de conception dans [paywall iOS : 7 erreurs de débutant](https://devoria.fr/blog/paywall-ios-erreurs-debutant).

## Les liens CGU et confidentialité : dans l'app et dans la fiche

L'autre forme de refus 3.1.2 ne vise pas le paywall, mais les métadonnées. Les messages publiés par des développeurs sur les [forums d'Apple](https://developer.apple.com/forums/thread/807082) précisent l'endroit attendu : le lien vers la politique de confidentialité dans le champ prévu d'App Store Connect, et le lien vers les conditions d'utilisation (EULA) dans la description ou dans le champ EULA.

Le piège vient du contrat standard. D'après l'[aide d'App Store Connect](https://developer.apple.com/help/app-store-connect/manage-app-information/provide-a-custom-license-agreement), si tu n'ajoutes pas de contrat personnalisé, le contrat standard d'Apple s'applique et « the license agreement link isn't shown on your App Store product page » : aucun lien n'apparaît sur ta fiche. **Si tu utilises le contrat standard, c'est à toi de mettre son lien dans la description**, vers ta page de conditions ou vers le [contrat de licence standard d'Apple](https://www.apple.com/legal/internet-services/itunes/dev/stdeula/).

Sur mes apps à abonnement, je termine la description par deux lignes, dans chaque langue de la fiche. Voici le modèle, à adapter à ton offre et à ton domaine :

```text
Essai gratuit de 7 jours, puis abonnement annuel ou hebdomadaire,
résiliable à tout moment.
Conditions : https://ton-domaine.fr/cgu
Confidentialité : https://ton-domaine.fr/confidentialite
```

Ouvre les deux liens avant de les coller : une page introuvable vaut un lien absent. Ce que la politique doit contenir est détaillé dans [politique de confidentialité d'une application](https://devoria.fr/blog/politique-confidentialite-app-ios), et le reste de la fiche sur la page [ASO App Store](https://devoria.fr/expertise/aso-app-store).

**Ce point se corrige sans nouveau build** : la description et les champs d'App Store Connect sont des métadonnées.

## 3.1.2(a) : un abonnement doit apporter une valeur continue

L'autre alinéa qui fait refuser vise le modèle, pas l'écran. La [3.1.2(a)](https://developer.apple.com/app-store/review/guidelines/#3.1.2a) demande « ongoing value » : une valeur qui continue dans le temps. La période dure au moins sept jours, et l'abonnement fonctionne sur tous les appareils de l'utilisateur. L'abonné obtient ce qu'il a payé sans tâche en plus, comme publier sur un réseau social.

Si ton app rend un service une fois pour toutes, un achat unique colle peut-être mieux. Les deux modèles sont comparés dans [abonnement ou achat unique](https://devoria.fr/blog/abonnement-ou-achat-unique-app-ios).

## Que répondre à Apple après un refus 3.1.2

La conversation se tient dans la section App Review de ton app. La procédure pour [répondre à App Review](https://developer.apple.com/help/app-store-connect/manage-submissions-to-app-review/reply-to-app-review-messages/) est la même que pour les autres règles. Deux cas se présentent :

- **Le problème est dans l'app** (taille des prix, mentions du paywall) : il faut un nouveau build, comme pour Solys et TradaZen. Le relecteur teste le code embarqué, je l'explique dans le guide sur la [guideline 2.1](https://devoria.fr/blog/guideline-2-1-app-store-refus).
- **Le problème est dans la fiche** (liens absents ou morts) : tu corriges les métadonnées, tu réponds, et la même soumission repart.

Écris en anglais, sobrement : ce qui posait problème, ce qui a changé, comment le vérifier. Voici le modèle que j'utilise (remplace le numéro de build, les prix et le parcours par les tiens) :

```text
Hello,

Thank you for your review.

Issue: on the paywall, the weekly equivalent price was displayed
more prominently than the billed amount.

Fix in build X:
- Each plan now shows its billed amount (e.g. "€19.99/year")
  as the largest price on the card.
- The weekly equivalent is a smaller grey caption below it.
- The paywall states the duration, the auto-renewal, and links
  to our Terms of Use and Privacy Policy.

How to verify: launch the app and complete the onboarding.
The paywall appears at the end.

Best regards,
```

## Corriger ton paywall avant le prochain envoi

Si ton app vient d'être refusée en 3.1.2, le [Kit Review Apple](https://devoria.fr/kits/review-apple) t'aide à retrouver la règle citée, ce qu'elle demande, et un exemple de correction et de réponse. Ses skills Claude Code relisent aussi ton paywall et ta fiche avant l'envoi. Pour un regard humain, [réserve une heure avec moi](https://devoria.fr/coaching) : on lit le message d'Apple et on reprend ton paywall sur ton écran. La démarche complète est sur la page [application refusée par Apple](https://devoria.fr/expertise/application-refusee-par-apple), et la mise en place de l'abonnement sur la page [abonnement in-app iOS](https://devoria.fr/expertise/abonnement-in-app-ios).

Si tu prépares ta première sortie, [fais ton diagnostic gratuit](https://devoria.fr/diagnostic) : il remet les étapes dans l'ordre et t'envoie ma checklist anti-refus Apple. Pour [créer une application mobile](https://devoria.fr/) qui encaisse dès sa sortie, le [Kit iOS](https://devoria.fr/kits/ios) consacre sa troisième étape, « brancher l'argent », à l'abonnement et au paywall.

Personne ne peut garantir qu'Apple acceptera ton app. Ce que je peux faire, c'est t'éviter le refus 3.1.2(c) que j'ai payé deux fois.

## Questions fréquentes

### Que veut dire « Guideline 3.1.2 - Business - Payments - Subscriptions » ?

C'est l'intitulé complet de la règle sur les abonnements. Il signale un prix mal hiérarchisé, une information manquante sur le paywall, un lien absent de la fiche ou un abonnement sans valeur continue. La lettre entre parenthèses, par exemple 3.1.2(c), indique l'alinéa visé.

### Peut-on encore afficher un prix par semaine ou par mois ?

Oui. Apple autorise un équivalent par semaine ou par mois, ou une économie, à condition qu'ils restent plus petits et moins visibles que le montant réellement facturé. Sur mes apps, l'équivalent est une légende grise sous le prix facturé, jamais dans la colonne des vrais prix.

### Faut-il un nouveau build après un refus 3.1.2 ?

Oui si le problème est sur le paywall, puisque le relecteur teste le code embarqué. Non s'il est dans la fiche, comme un lien absent de la description : tu corriges les métadonnées et la même soumission repart.

### Où mettre le lien vers les conditions d'utilisation (EULA) ?

Dans l'app, sur le paywall. Côté fiche, dans la description ou dans le champ EULA d'App Store Connect si tu as un contrat personnalisé. Avec le contrat standard d'Apple, aucun lien ne s'affiche sur ta fiche : ajoute-le toi-même dans la description, dans chaque langue.

### Mon paywall a déjà été accepté, pourquoi est-il refusé maintenant ?

Parce que chaque version repasse en revue, parfois devant un autre relecteur. Un prix par semaine en avant avait été accepté sur TradaZen, puis refusé sur Solys et sur TradaZen en octobre 2026. Seul le texte de la règle protège.


## Ton projet

[Kit Review Apple](https://devoria.fr/kits/review-apple) : Tout ce que je vérifie avant d'envoyer une app à Apple, et deux skills qui font la relecture avec Claude Code. 29 €, paiement unique. Inclus : La checklist avant l'envoi ; Les refus que j'ai pris, et ce que j'ai corrigé ; Les notes pour le testeur ; Les skills de vérification. Prérequis : une app iPhone presque prête et Claude Code ou Cursor. Téléchargement immédiat après le paiement.

[Kit iOS Devoria](https://devoria.fr/kits/ios) : Le code de départ de mes apps, le parcours avec les messages à donner à Claude, et tous les kits. Claude part d'une app qui tourne déjà. 129,99 €, paiement unique. Inclus : Le code de départ de ton app ; Les styles visuels ; Le parcours pas à pas ; Kit Review Apple ; Kit Captures ; Kit ASO ; 1 an de mises à jour ; Bonus : la séance 1:1 à moitié prix. Prérequis : un Mac avec Xcode 26 ou plus, Claude Code (abonnement payant) ou Cursor, et un compte Apple Developer (99 $ par an) pour publier. Téléchargement immédiat après le paiement.

[Diagnostic gratuit](https://devoria.fr/diagnostic) : quelques questions sur ton projet. Il dit ce qui te bloque vraiment, l'ordre des quatre étapes et le kit qui correspond. En laissant ton e-mail, tu reçois la checklist anti-refus Apple : les points vérifiés avant chaque envoi, tirés des refus reçus par les apps du studio.

[Une heure avec moi](https://devoria.fr/coaching) : On regarde ton app ou ton projet Claude, écran partagé : ce qui bloque, ce que je change en premier, et dans quel ordre. 100 € la séance d'une heure, en visio, paiement en une fois. Sujets : L'audit de ton app ; Ton travail avec Claude ; Ta fiche et ton paywall ; Un refus d'Apple.
