L'order ID sur le reçu App Store d'un client vous dit ce qu'il a acheté et si Apple l'a déjà remboursé
Le endpoint Look Up Order ID d'Apple transforme l'order ID du reçu App Store d'un client en transactions signées, avec les dates et motifs de remboursement. Comment l'utiliser face aux e-mails de remboursement, ce qu'il ne fait pas, et la comparaison avec l'order ID de Google Play.

Points clés
- Apple envoie par e-mail un reçu avec un order ID chaque fois qu'un client effectue des achats intégrés, et le client peut aussi retrouver ses order ID dans son historique d'achats de l'App Store.
- Le endpoint Look Up Order ID de l'App Store Server API d'Apple (GET /inApps/v1/lookup/{orderId}) renvoie une ou plusieurs transactions signées pour un order ID valide, si bien que le support voit le productId et le purchaseDate sans deviner.
- Une transaction App Store décodée contient revocationDate et revocationReason, donc une recherche par order ID montre si Apple a déjà remboursé l'achat. Le motif 1 signifie qu'Apple l'a remboursé pour un problème réel ou perçu dans l'app.
- Look Up Order ID renvoie OrderLookupStatus 1 et aucun tableau signedTransactions quand l'order ID n'est pas valide pour votre app, ce qui signale un mauvais reçu ou un achat fait dans une autre app.
- Look Up Order ID n'est pas disponible dans l'environnement sandbox d'Apple, et sa limite en production est de 10 requêtes par seconde par app, appliquée sur une base horaire.
- Les développeurs ne peuvent pas émettre de remboursements App Store. Apple les décide sur reportaproblem.apple.com, et la seule étape où le développeur apporte des éléments consiste à répondre à un CONSUMPTION_REQUEST sous 12 heures.
- Google Play envoie par e-mail un order ID pour chaque achat ponctuel et chaque renouvellement d'abonnement, et le développeur peut rechercher cet order ID dans Play Console et le rembourser directement. Play Console précise qu'un remboursement ne peut pas être annulé.
Avant de répondre à l'e-mail de remboursement d'un client iPhone, demandez-lui l'order ID App Store qui figure sur son reçu Apple. Cette seule chaîne, passée dans le endpoint Look Up Order ID d'Apple, vous dit quel produit il a acheté, quand, et si Apple l'a déjà remboursé. Sans elle, vous comparez une capture d'écran et une adresse e-mail à votre base de données en espérant tomber juste. Avec elle, vous savez en quelques secondes si vous parlez à un client payant, à un client qu'Apple a déjà remboursé, ou à quelqu'un qui tient le reçu d'une autre app.
D'où vient l'order ID App Store
La documentation d'Apple est précise. Quand des clients effectuent un ou plusieurs achats intégrés dans votre app, l'App Store leur envoie un reçu par e-mail, et ce reçu contient un order ID. Les clients peuvent aussi retrouver leurs order ID dans leur historique d'achats de l'App Store. La page d'historique d'Apple se trouve sur reportaproblem.apple.com et dans l'app App Store, sous Apps et historique d'achats, et elle affiche par défaut les 90 derniers jours, avec des filtres pour les achats plus anciens.
Le client a donc déjà la clé. Votre formulaire de support n'a qu'à la lui demander.
Pourquoi une adresse e-mail ne suffit pas
Apple ne vous transmet pas l'e-mail du compte Apple du client. L'adresse qui écrit à votre support peut n'avoir aucun lien avec le compte qui a payé. Si vous définissez un appAccountToken à l'achat, vous pouvez relier une transaction à votre propre identifiant utilisateur, mais seulement de votre côté. L'order ID fonctionne du côté du client, à partir d'un reçu qu'il peut transférer d'un geste.
Ce que renvoie Look Up Order ID
Look Up Order ID fait partie de l'App Store Server API, disponible depuis la version 1.1.0. Vous appelez GET https://api.storekit.apple.com/inApps/v1/lookup/{orderId} avec votre JWT signé. Apple indique que la réponse s'appuie sur l'historique des achats intégrés du client, qu'il ait installé, supprimé ou réinstallé l'app.
| Champ ou comportement | Ce que dit la documentation d'Apple | Ce que le support en fait |
|---|---|---|
| OrderLookupStatus 0 | Order ID valide. La réponse contient un tableau d'une ou plusieurs transactions signées | Décodez chacune et lisez l'achat |
| OrderLookupStatus 1 | La réponse ne contient pas de tableau signedTransactions | Considérez l'order ID comme non valide pour votre app. Demandez le bon reçu |
| productId et purchaseDate | Apple les cite comme les champs à utiliser pour le support client | Confirmez ce qui a été acheté et quand |
| revocationDate | Le moment où l'App Store a remboursé la transaction ou l'a retirée du partage familial | S'il est présent, Apple a déjà remboursé le client |
| revocationReason | 0 : remboursée pour d'autres raisons, comme un achat accidentel. 1 : remboursée pour un problème réel ou perçu dans votre app | Un 1 est un signal produit, pas seulement un ticket de support |
| appAccountToken | L'UUID que vous définissez à l'achat, si vous en définissez un | Reliez la commande à votre propre fiche utilisateur |
| price et currency | Apple dit de ne pas les utiliser pour le rapprochement des revenus | Utilisez les rapports App Store Connect pour l'argent |
| Sandbox | Le endpoint n'est pas disponible dans l'environnement sandbox | Testez uniquement avec des order ID de production |
| Limite de requêtes | 10 requêtes par seconde par app, appliquée sur une base horaire. Au-delà, HTTP 429 avec un en-tête Retry-After | Largement assez pour un support, pas pour des analyses en masse |
Est-ce un reçu valide pour mon app ?
C'est la première question à laquelle répond OrderLookupStatus. Un 1 signifie que l'order ID ne correspond à aucun achat dans votre app. Les cas courants sont une faute de frappe, un reçu d'une autre app, ou un reçu qui ne vient même pas de l'App Store. Ne remboursez, ne créditez et ne restaurez rien sur un 1. Demandez au client de vérifier à nouveau son reçu.
Apple a-t-il déjà remboursé cet achat ?
Vérifiez revocationDate sur chaque transaction décodée. S'il est renseigné, Apple a déjà remboursé cet achat ou l'a retiré du partage familial, et le client a récupéré son argent. Vos App Store Server Notifications auraient dû envoyer un REFUND pour la même transaction, c'est donc aussi un moyen peu coûteux de confirmer que votre serveur a bien révoqué l'accès.

Ce que l'order ID ne peut pas faire sur l'App Store
Il ne peut pas déclencher de remboursement. Les développeurs n'ont aucun bouton de remboursement sur l'App Store. Apple décide des remboursements, et son article d'assistance renvoie les clients vers reportaproblem.apple.com, où ils choisissent « I'd like to », puis « Request a refund », indiquent un motif et sélectionnent l'article. Apple précise aussi qu'un débit en attente ne peut pas être remboursé tant que le client n'a pas reçu le reçu par e-mail.
Le seul moment où vous avez votre mot à dire, c'est le CONSUMPTION_REQUEST d'Apple. Quand un client demande un remboursement à Apple, Apple peut envoyer cette notification, et vous avez 12 heures pour répondre avec Send Consumption Information. La recherche par order ID est un outil de support. Elle n'ouvre pas cette fenêtre et ne la prolonge pas.
Ce que coûte un e-mail de remboursement quand on saute la recherche
Le support sans order ID, c'est là que l'argent fuit sans bruit. Trois schémas reviennent sans cesse.
- Un geste commercial en plus d'un remboursement. Apple rembourse l'achat, le client vous écrit aussi, et le support accorde des crédits gratuits ou un mois de plus. Chaque crédit offert tourne sur du calcul, des appels d'API et du stockage que vous payez, pour un compte déjà remboursé.
- Un accès jamais révoqué. Si votre traitement des REFUND a échoué, le client remboursé continue de consommer. Une recherche qui affiche un revocationDate alors que votre base indique encore actif, c'est un rapport de bug avec un prix.
- Mauvais compte, mauvaise correction. Restaurer ou créditer le compte derrière un e-mail transféré, alors que l'order ID appartient à quelqu'un d'autre, offre un service payant à une personne qui ne l'a jamais acheté.
Aucun de ces cas n'a besoin d'un litige ou d'un délai pour coûter cher. Ce sont simplement des réponses de support données sans les faits. Un appel d'API par ticket supprime les suppositions.
revocationReason 1 veut-il dire que j'ai fait une erreur ?
Pas forcément. Apple indique que le motif 1 signifie qu'il a remboursé l'achat pour un problème réel ou perçu dans votre app. Le mot perçu pèse lourd ici. Mais une série de remboursements au motif 1 sur un même produit, après une même version, c'est le retour produit le plus clair qu'Apple vous donne. Comptez-les.
Comment se compare l'order ID de Google Play
Google Play fonctionne dans l'autre sens. La documentation de facturation de Google indique que les utilisateurs reçoivent un e-mail avec un order ID unique pour chaque achat de produit ponctuel, pour l'achat initial d'un abonnement et pour chaque renouvellement, et que vous pouvez utiliser l'order ID pour gérer les remboursements dans Play Console. Vous cherchez dans la gestion des commandes par order ID ou par l'adresse e-mail complète de l'utilisateur, puis vous remboursez vous-même.
| Question | Order ID App Store | Order ID Google Play |
|---|---|---|
| Où le client le trouve | Reçu par e-mail et historique d'achats de l'App Store | Reçu par e-mail pour chaque achat et chaque renouvellement |
| Comment vous le recherchez | Look Up Order ID dans l'App Store Server API | Recherche dans la gestion des commandes de Play Console |
| Pouvez-vous rembourser avec | Non. Apple décide | Oui. Remboursements complets, et partiels sur les achats intégrés et les abonnements |
| Fenêtre de preuve pour le remboursement | CONSUMPTION_REQUEST, 12 heures, Apple décide | Examen de rétrofacturation via orders.reviewrefund, 24 heures |
| Un remboursement peut-il être annulé | Pas par vous | Non. Play Console précise qu'un remboursement ne peut pas être annulé |
Sur Google Play, l'order ID compte davantage parce que c'est vous qui appuyez sur le bouton. Play Console indique que rembourser la commande d'abonnement la plus récente supprime immédiatement l'abonnement et annule les renouvellements futurs, tandis que rembourser une commande plus ancienne est un simple remboursement qui laisse l'abonnement actif. Les remboursements partiels ne sont possibles que pour les commandes passées après mars 2018, et vous ne pouvez pas rembourser partiellement une app payante.
Placez l'order ID en tête de votre parcours de support aux remboursements
- Demandez l'order ID dans votre formulaire de support, avec une indication d'une ligne : il figure dans l'e-mail de reçu d'Apple ou de Google Play.
- Sur iOS, appelez Look Up Order ID, décodez chaque transaction et montrez au support le productId, le purchaseDate, le revocationDate et le revocationReason sur un seul écran.
- Si OrderLookupStatus vaut 1, arrêtez-vous et demandez le bon reçu. N'accordez rien.
- Si revocationDate est renseigné, vérifiez que l'accès est déjà révoqué sur votre serveur, puis clôturez le ticket. Pas de geste commercial en plus.
- S'il ne l'est pas et que le client veut être remboursé, renvoyez-le vers reportaproblem.apple.com et gardez votre traitement du CONSUMPTION_REQUEST prêt pour la fenêtre de 12 heures. RefundHalt répond à cette demande avec les données de consommation qu'Apple réclame.
- Sur Android, trouvez la commande exacte dans Play Console avant de rembourser, et choisissez délibérément entre remboursement seul et remboursement avec révocation.
Questions fréquentes
- Comment rechercher un order ID App Store en tant que développeur ?
- Appelez le endpoint Look Up Order ID de l'App Store Server API, GET https://api.storekit.apple.com/inApps/v1/lookup/{orderId}, avec votre JWT signé. Un order ID valide renvoie OrderLookupStatus 0 et une ou plusieurs transactions signées, que vous décodez pour lire le productId, le purchaseDate et les éventuels détails de remboursement. Le endpoint n'est pas disponible en sandbox.
- Où un client trouve-t-il son order ID App Store ?
- Dans le reçu qu'Apple lui envoie par e-mail à chaque achat intégré, et dans son historique d'achats de l'App Store, sur reportaproblem.apple.com ou sous Apps et historique d'achats dans l'app App Store. L'historique affiche par défaut les 90 derniers jours, avec des filtres pour les achats plus anciens.
- Puis-je rembourser un achat App Store avec l'order ID ?
- Non. Les développeurs ne peuvent pas émettre de remboursements App Store. Apple les décide quand le client en demande un sur reportaproblem.apple.com. Votre contribution consiste à répondre au CONSUMPTION_REQUEST d'Apple sous 12 heures avec Send Consumption Information.
- Comment savoir si Apple a déjà remboursé un achat ?
- Recherchez l'order ID et vérifiez revocationDate dans chaque transaction décodée. S'il est renseigné, Apple a remboursé l'achat ou l'a retiré du partage familial. revocationReason 0 signifie d'autres raisons, comme un achat accidentel, et 1 signifie un problème réel ou perçu dans votre app.
- Que signifie OrderLookupStatus 1 ?
- Cela signifie que l'order ID n'est pas valide pour votre app, et la réponse ne contient pas de tableau signedTransactions. En général, le client a envoyé le reçu d'une autre app, a mal saisi l'identifiant ou a envoyé un reçu qui ne vient pas de l'App Store. Demandez le bon reçu avant d'accorder quoi que ce soit.
Sources et lectures complémentaires
- Apple Developer Documentation: Look Up Order ID
- Apple Developer Documentation: orderId
- Apple Developer Documentation: revocationReason
- Apple Developer Documentation: Identifying rate limits
- Apple Support: See your purchase history for the App Store, iTunes Store, and more
- Apple Support: Request a refund for apps or content that you bought from Apple
- Play Console Help: Refund orders and subscriptions
- Android Developers: Integrate the Google Play Billing Library into your app
RefundHalt
Le pilote automatique des remboursements pour l'App Store et Google Play
Poursuivre la lecture
Les remboursements du paiement web sur iOS vous reviennent à la place d'Apple, tout comme les litiges bancaires
Les apps iPhone aux États-Unis peuvent désormais renvoyer les acheteurs vers un paiement web. Apple dit ne pas pouvoir aider pour les remboursements de ces ventes, donc le service des remboursements, les rétrofacturations et les frais de litige de $15 passent chez vous. Voici ce qui change, ce que cela coûte et comment limiter les litiges.
Le remboursement d'une app payante n'atteint jamais votre serveur, c'est donc l'app elle-même qui doit le détecter
Les remboursements d'apps payantes à l'achat échappent à toutes les notifications qu'écoute votre serveur. Google laisse à l'acheteur deux heures pour la retourner et désinstalle l'app, Apple peut rembourser dans un délai de 90 jours en vertu de votre contrat, et aucun des deux ne demande de preuves. Voici ce que chaque store vous dit, ce que cela coûte et comment le vérifier dans l'app.