Advanced Commerce API रिफ़ंड ही वह एकमात्र तरीका है जिससे iOS डेवलपर रिफ़ंड शुरू कर सकता है, और अंतिम फ़ैसला फिर भी Apple का होता है
ज़्यादातर iOS डेवलपर ग्राहक को रिफ़ंड नहीं दे सकते। Apple के Advanced Commerce API पर चलने वाले ऐप रिफ़ंड का अनुरोध कर सकते हैं, सब्सक्रिप्शन रद्द (revoke) कर सकते हैं, या कस्टम राशि लौटा सकते हैं। यहाँ बताया गया है कि हर endpoint कैसे काम करता है, Apple फिर भी क्या ठुकरा सकता है, और पैसा कहाँ गलत जाता है।

मुख्य बातें
- Apple के एक इंजीनियर ने जून 2026 में कहा कि डेवलपर किसी सामान्य App Store खरीद पर सीधे रिफ़ंड जारी नहीं कर सकता। डेवलपर का एकमात्र योगदान वह consumption डेटा और refundPreference है जो CONSUMPTION_REQUEST के जवाब में भेजा जाता है।
- Apple के Advanced Commerce API के लिए स्वीकृत ऐप्स को Request Transaction Refund endpoint मिलता है, जो App Store से किसी एक बार के शुल्क या सब्सक्रिप्शन ट्रांज़ैक्शन का रिफ़ंड माँगता है। साथ में Revoke Subscription और Cancel a Subscription endpoint भी मिलते हैं।
- Advanced Commerce API के refund, revoke और cancel endpoint कॉल करने के लिए डेवलपर के Account Holder को Advanced Commerce API Addendum पर हस्ताक्षर करने होते हैं। Apple कहता है कि नवीनतम संस्करण स्वीकार न होने पर कॉल एक error लौटाती है।
- Request Transaction Refund endpoint में refundType के तौर पर FULL, PRORATED या CUSTOM दिया जाता है, और मुद्रा की milliunits में refundAmount केवल CUSTOM के साथ मान्य है। Apple कहता है कि कनाडा और अमेरिका को छोड़कर हर क्षेत्र में राशि में टैक्स शामिल होना चाहिए।
- Apple का refundRiskingPreference फ़ील्ड डिफ़ॉल्ट रूप से true होता है, जिससे App Store डेवलपर के अपने रिफ़ंड अनुरोध पर CONSUMPTION_REQUEST भेज सकता है। Apple 12 घंटे के भीतर जवाब माँगता है।
- Advanced Commerce API के refund, revoke और cancel endpoint प्रोडक्शन में प्रति ऐप प्रति सेकंड 5 अनुरोधों तक सीमित हैं, और sandbox को उसका 10 प्रतिशत मिलता है।
- सफल Revoke Subscription कॉल के बाद Apple एक REFUND notification भेजता है और डेवलपर्स से कहता है कि सेवा उसकी revocationDate से बंद करें, notification आने से पहले नहीं।
सामान्य iOS डेवलपर ग्राहक को रिफ़ंड नहीं दे सकते। जून 2026 में App Store के एक Commerce Engineer ने डेवलपर फ़ोरम के एक सवाल का जवाब एक पंक्ति में दिया: फ़िलहाल डेवलपर के रूप में सीधे रिफ़ंड जारी करना संभव नहीं है। एक अपवाद है, और वह Advanced Commerce API के भीतर है। Apple जिन ऐप्स को इसके लिए स्वीकृत करता है, वे Advanced Commerce API रिफ़ंड अनुरोध भेज सकते हैं, पैसे लौटाते हुए सब्सक्रिप्शन revoke कर सकते हैं, या कस्टम राशि माँग सकते हैं। पैसा लौटेगा या नहीं, यह फिर भी Apple तय करता है।
Advanced Commerce API क्या है और यह किसे मिलता है
Apple ने Advanced Commerce API 23 जनवरी 2025 को जारी किया। यह कस्टम एक बार की खरीद, सब्सक्रिप्शन, और वैकल्पिक add-on वाले सब्सक्रिप्शन के असाधारण रूप से बड़े कैटलॉग के लिए Apple In-App Purchases संभालता है। आपको हर प्रोडक्ट App Store Connect में नहीं बनाना पड़ता। आप अपने सर्वर पर SKU परिभाषित करते हैं और खरीद के समय उन्हें Apple को भेजते हैं।
पहुँच ऐप दर ऐप दी जाती है। आप एक अनुरोध फ़ॉर्म भरते हैं, और Apple का पात्रता पेज तीन बिज़नेस मॉडल बताता है जो ऐप के मूल में होने चाहिए:
- एक बार की खरीद के असाधारण रूप से बड़े कैटलॉग, जैसे ऑडियोबुक, क्लास, कोर्स या mini apps।
- सब्सक्रिप्शन कंटेंट के असाधारण रूप से बड़े कैटलॉग, जहाँ हर क्रिएटर की पेशकश अपना अलग सब्सक्रिप्शन होती है।
- वैकल्पिक add-on वाला सब्सक्रिप्शन जो एक ही खरीद के रूप में साथ रिन्यू होता है, जैसे प्रीमियम चैनल या स्पोर्ट्स।
Apple उन ऐप्स को भी आवेदन करने देता है जिन्हें किसी दूसरे प्रोग्राम के लिए इस API की ज़रूरत है। Mini Apps Partner Program, जो होस्ट किए गए mini apps में योग्य In-App Purchase बिक्री का 85% सदस्यों को देता है, इसकी माँग करता है।
रिफ़ंड endpoint बाद में आए, और उनके लिए हस्ताक्षर ज़रूरी है
24 मार्च 2025 के संस्करण 1.1 में Request Transaction Refund और Revoke Subscription जोड़े गए। Apple के प्रोग्राम पेज के अनुसार सब्सक्रिप्शन कंटेंट देने वाले ऐप्स Cancel, Revoke और Refund APIs के लिए भी पात्र हो सकते हैं, ताकि वे रद्दीकरण संभाल सकें, खरीद के बाद कंटेंट सत्यापित कर सकें और अपने कैटलॉग प्रबंधित कर सकें। हर endpoint पेज एक ही शर्त जोड़ता है: आपके Account Holder को Advanced Commerce API Addendum पर हस्ताक्षर करने होंगे, और नवीनतम संस्करण स्वीकार न होने पर कॉल एक error लौटाती है। हर endpoint किन उपयोगों के लिए है, यह दस्तावेज़ नहीं, बल्कि Addendum (अनुबंध का परिशिष्ट) बताता है।
तीनों endpoint, आमने-सामने
| Cancel a Subscription | Revoke Subscription | Request Transaction Refund | |
|---|---|---|---|
| Path | advancedCommerce/v1/subscription/cancel/{transactionId} | advancedCommerce/v1/subscription/revoke/{transactionId} | advancedCommerce/v1/transaction/requestRefund/{transactionId} |
| किस पर लागू | ऑटो-रिन्यू होने वाले सब्सक्रिप्शन | एक सब्सक्रिप्शन और उसके सभी आइटम | एक बार के शुल्क और सब्सक्रिप्शन ट्रांज़ैक्शन |
| पैसा वापसी | कोई नहीं | FULL या PRORATED | FULL, PRORATED या CUSTOM, प्रति SKU |
| पहुँच | अवधि के अंत तक जारी | revocationDate पर समाप्त | revoke फ़्लैग से हर आइटम के लिए तय |
| प्रोडक्शन रेट लिमिट | प्रति सेकंड 5 | प्रति सेकंड 5 | प्रति सेकंड 5 |
Cancel a Subscription अगला शुल्क रोकता है
Cancel ऑटो-रिन्यू बंद कर देता है। Apple के अनुसार ग्राहक की पहुँच मौजूदा अवधि के अंत तक बनी रहती है। कुछ भी रिफ़ंड नहीं होता। यह तब सही विकल्प है जब ग्राहक बाहर निकलना चाहता है और जिस समय का भुगतान किया था उसका उपयोग कर चुका है।
Revoke Subscription सब कुछ अभी खत्म करता है
Revoke ऑटो-रिन्यू को false कर देता है और पूरे या आनुपातिक रिफ़ंड के साथ सब्सक्रिप्शन revoke कर देता है। इसकी body में refundReason, refundRiskingPreference, refundType और requestInfo जाते हैं। इसके बाद Apple आपके App Store Server Notifications V2 endpoint पर एक REFUND notification भेजता है। Apple का निर्देश स्पष्ट है: उस notification में दी गई revocationDate से सेवा बंद करें, और notification आने से पहले बंद न करें।
Request Transaction Refund आइटम दर आइटम काम करता है
यह सटीक औज़ार है। आप आइटम्स की एक सूची भेजते हैं, और हर आइटम में एक SKU, एक refundReason, एक refundType और एक revoke फ़्लैग होता है। CUSTOM के साथ आप मुद्रा की milliunits में refundAmount भी भेजते हैं, यानी 4990 का मतलब 4.99 है। FULL या PRORATED के साथ राशि भेजेंगे तो Apple उसे error 4000155 के साथ अस्वीकार कर देगा। जवाब में एक signed transaction आता है, और सब्सक्रिप्शन के लिए signed renewal info भी।
Apple ये refundReason मान स्वीकार करता है: UNINTENDED_PURCHASE, FULFILLMENT_ISSUE, UNSATISFIED_WITH_PURCHASE, LEGAL, OTHER और MODIFY_ITEMS_REFUND। सातवाँ, SIMULATE_REFUND_DECLINE, केवल sandbox और TestFlight टेस्टिंग के लिए है, और यह इसलिए मौजूद है क्योंकि App Store मना कर सकता है।
Apple आपके अपने रिफ़ंड अनुरोध को भी ठुकरा सकता है
endpoint का नाम ईमानदार है। यह एक अनुरोध है। दो फ़ील्ड दिखाते हैं कि असल फ़ैसला कहाँ होता है।
refundRiskingPreference consumption जाँच को न्योता देता है
Apple refundRiskingPreference को इस रूप में बताता है कि क्या App Store रिफ़ंड के फ़ैसले के लिए आपसे consumption डेटा माँगेगा। यह डिफ़ॉल्ट रूप से true होता है। true होने पर आपको अपने ही रिफ़ंड अनुरोध के लिए एक CONSUMPTION_REQUEST मिलता है, और आप Send Consumption Information के ज़रिए जवाब देते हैं। Apple डेवलपर्स से CONSUMPTION_REQUEST मिलने के 12 घंटे के भीतर जवाब देने को कहता है। इसे false करें तो वह notification नहीं आता।
वे errors जो 'नहीं' कहते हैं
| Error | कोड | Apple क्या कहता है |
|---|---|---|
| AlreadyRefundedError | 4030021 | ट्रांज़ैक्शन पहले ही रिफ़ंड हो चुका है |
| PendingRefundError | 4000181 | ट्रांज़ैक्शन पर रिफ़ंड लंबित हैं |
| TransactionNotRefundableError | 4030024 | ट्रांज़ैक्शन रिफ़ंड योग्य नहीं है |
| TransactionCannotBeRefundedContactSupportError | 4030025 | ग्राहक Apple Support से संपर्क कर सकता है |
| RefundAmountWithoutCustomError | 4000155 | CUSTOM के बिना राशि भेजी गई |
PendingRefundError के लिए पहले से योजना बनाएँ। इसकी एक संभावित वजह वह ग्राहक है जिसने आपकी सपोर्ट टीम के कुछ करने से पहले ही Report a Problem के ज़रिए Apple से अनुरोध कर दिया। Apple के पात्रता नियमों के तहत इन ऐप्स को वैसे भी ऐप के भीतर रिफ़ंड का रास्ता देना होता है, या तो Report a Problem लिंक या beginRefundRequest API, इसलिए दोनों दरवाज़े एक साथ खुले रहते हैं।

Advanced Commerce API रिफ़ंड की आपको असल में कितनी कीमत चुकानी पड़ती है
अपनी पहल पर रिफ़ंड देना विवाद लड़ने से सस्ता लगता है। फिर भी पैसा बाहर जाता है, और API की वजह से कुछ गलतियाँ बड़े पैमाने पर दोहराना आसान हो जाता है।
कस्टम राशि के भीतर टैक्स
Apple कहता है कि माँगी गई refundAmount में कनाडा और अमेरिका को छोड़कर सभी क्षेत्रों के लिए टैक्स शामिल होना चाहिए। जो टीम CUSTOM रिफ़ंड अपनी टैक्स से पहले की SKU कीमत से निकालती है, वह बाकी हर storefront में ग्राहकों को कम रिफ़ंड देगी, और फिर हर मामला ठीक करने में सपोर्ट का समय खर्च करेगी।
वे लागतें जो वापस नहीं आतीं
- भुगतान: क्रिएटर कैटलॉग या mini app होस्ट में क्रिएटर का हिस्सा अक्सर बिक्री पर ही दे दिया जाता है। ग्राहक को रिफ़ंड देने से वह वापस नहीं आता।
- कंटेंट लाइसेंसिंग: ऑडियोबुक या कोर्स के लिए अधिकार-धारक को देय प्रति-टाइटल फ़ीस, आपके अनुबंध के अनुसार, पहुँच मिलते ही लागू हो सकती है, और रिफ़ंड उसे उलटता नहीं।
- कंप्यूट: स्ट्रीमिंग, ट्रांसकोडिंग और खरीद के लिए किया गया हर सर्वर काम पहले ही आपके बिल में जुड़ चुका है।
- API कॉल: प्रति अनुरोध बिल करने वाली थर्ड-पार्टी सेवाएँ, स्पीच से लेकर मॉडल इन्फ़रेंस तक, रिफ़ंड के बाद भी बिल में रहती हैं।
इरादा एक आइटम का था, रिफ़ंड पूरा हो गया
Revoke Subscription पूरे सब्सक्रिप्शन को, add-on समेत, रिफ़ंड करके खत्म कर देता है। अगर ग्राहक सिर्फ़ एक add-on पर आपत्ति करता है, तो Request Transaction Refund से आप केवल उसी SKU का रिफ़ंड दे सकते हैं, और revoke सिर्फ़ उसी आइटम पर लगा सकते हैं। एक आइटम की शिकायत पर Revoke Subscription कॉल करने से बेस प्लान की कमाई भी लौट जाती है।
इन्हें चालू करने से पहले एक बिल्ड चेकलिस्ट
- पुष्टि करें कि आपके Account Holder ने मौजूदा Advanced Commerce API Addendum स्वीकार कर लिया है, और उसकी अवधि खत्म होने पर आने वाले error पर अलर्ट लगाएँ।
- हर अनुरोध के लिए नया requestReferenceId UUID बनाएँ, और उसी को दोबारा केवल टाइम-आउट हुई कॉल को फिर से भेजने के लिए इस्तेमाल करें।
- रिफ़ंड कॉल्स को कतार में रखें। सीमा प्रति ऐप प्रति सेकंड 5 है, और 429 के साथ UNIX milliseconds (मिलीसेकंड) में Retry-After header आता है।
- sandbox में SIMULATE_REFUND_DECLINE से अस्वीकृतियों की जाँच करें, और याद रखें कि sandbox की सीमाएँ प्रोडक्शन का 10 प्रतिशत हैं।
- refundRiskingPreference हर मामले के हिसाब से तय करें, और जब यह true रहे तो 12 घंटे की अवधि के लिए consumption जवाब देने वाला सिस्टम तैयार रखें।
- पहुँच तभी बंद करें जब REFUND notification आए, उसकी revocationDate से।
- हर अनुरोध का कारण, राशि और SKU लॉग करें, ताकि आपकी अपनी रिफ़ंड दर Apple से पहले आपको दिखे।
अक्सर पूछे जाने वाले सवाल
- क्या iOS डेवलपर ग्राहक को सीधे रिफ़ंड दे सकता है?
- सामान्य App Store खरीद पर नहीं। Apple के एक इंजीनियर ने जून 2026 में कहा कि डेवलपर के लिए सीधे रिफ़ंड जारी करना संभव नहीं है। Advanced Commerce API के लिए स्वीकृत ऐप्स, Addendum पर हस्ताक्षर के बाद, Request Transaction Refund endpoint के ज़रिए रिफ़ंड का अनुरोध कर सकते हैं, और फ़ैसला फिर भी Apple करता है।
- Advanced Commerce API में Cancel और Revoke में क्या अंतर है?
- Cancel ऑटो-रिन्यूअल बंद करता है और ग्राहक की पहुँच अवधि खत्म होने तक बनी रहती है, कोई रिफ़ंड नहीं होता। Revoke सब्सक्रिप्शन और उसके सभी आइटम तुरंत खत्म करता है और पूरी या आनुपातिक राशि रिफ़ंड करता है। revoke के बाद Apple एक REFUND notification भेजता है।
- क्या मैं Advanced Commerce API से कस्टम राशि रिफ़ंड कर सकता हूँ?
- हाँ। refundType को CUSTOM पर सेट करें और refundAmount मुद्रा की milliunits में भेजें। Apple कहता है कि कनाडा और अमेरिका को छोड़कर सभी क्षेत्रों के लिए राशि में टैक्स शामिल होना चाहिए, और FULL या PRORATED के साथ राशि भेजने पर error 4000155 लौटता है।
- क्या मुझे अपने ही माँगे गए रिफ़ंड के लिए CONSUMPTION_REQUEST मिलेगा?
- मिल सकता है। refundRiskingPreference डिफ़ॉल्ट रूप से true होता है, जिससे App Store आपसे CONSUMPTION_REQUEST के ज़रिए consumption डेटा माँग सकता है, और Apple 12 घंटे के भीतर जवाब माँगता है। इसे false करें तो Apple के अनुसार वह notification नहीं भेजा जाएगा।
- मेरा Advanced Commerce API रिफ़ंड अनुरोध विफल क्यों हुआ?
- error कोड देखें। 4030021 का मतलब है ट्रांज़ैक्शन पहले ही रिफ़ंड हो चुका है, 4000181 का मतलब है रिफ़ंड पहले से लंबित है, 4030024 का मतलब है यह रिफ़ंड योग्य नहीं है, और 4030025 का मतलब है ग्राहक को Apple Support से संपर्क करना चाहिए। बिना हस्ताक्षर वाला या पुराना Addendum भी error लौटाता है।
स्रोत और आगे की जानकारी
- Apple Developer: Advanced Commerce API eligibility and requirements
- Advanced Commerce API: Request Transaction Refund
- Advanced Commerce API: RequestRefundItem
- Advanced Commerce API: refundRiskingPreference
- Advanced Commerce API: Revoke Subscription
- Advanced Commerce API: Rate limits
- Advanced Commerce API changelog
- App Store Server API: Send Consumption Information
- Apple Developer Forums: Refund option in App Store Server API
- Apple Developer: Mini Apps Partner Program
RefundHalt
App Store और Google Play के लिए refund ऑटोपायलट
आगे पढ़ें
ज़्यादा रिफ़ंड अनुरोध आपको रिफ़ंड से भी महंगे पड़ सकते हैं, क्योंकि दोनों ऐप स्टोर इन्हें क्वालिटी का संकेत मानते हैं
Apple की गाइडलाइन 5.6.4 ज़्यादा रिफ़ंड अनुरोधों को इस बात का संकेत बताती है कि ऐप क्वालिटी के मानकों पर खरा नहीं उतर रहा, और Google का डिस्ट्रिब्यूशन एग्रीमेंट नए डेवलपर्स के ऐप रिफ़ंड दर के आधार पर हटाने की अनुमति देता है। जानिए हर स्टोर क्या कहता है, ऐप हटने की कीमत क्या है और इससे कैसे बचें।
रिफ़ंड पर कार्रवाई करने से पहले App Store सर्वर नोटिफ़िकेशन सत्यापित करें, क्योंकि आपके webhook URL पर कोई भी पोस्ट कर सकता है
जब तक आप इसके सिग्नेचर की जाँच नहीं करते, रिफ़ंड नोटिफ़िकेशन सिर्फ़ एक HTTPS अनुरोध है। जानिए App Store सर्वर नोटिफ़िकेशन और Google Play RTDN संदेशों को कैसे सत्यापित करें, हर स्टोर क्या साइन करता है, और जाली या गलती से अस्वीकार किया गया रिफ़ंड आपको कितना महँगा पड़ता है।