Skip to main content

Change Plan API

Full API docs for updating subscriptions.

Plan Change Preview

See charge amounts before changing plans.

Integration Guide

Step-by-step subscription setup.

Subscription Upgrade या Downgrade क्या है?

किसी customer के subscription plan को बदलकर उसे अलग-अलग tiers के बीच ले जाएँ, seat-based products के लिए quantity समायोजित करें, या नए product पर migrate करें। API आपके चुने हुए billing mode के आधार पर prorations और charges की स्वचालित गणना करता है।
Plan changes can trigger an immediate charge depending on the proration mode you choose.

Plan Changes का उपयोग कब करें

  • Upgrade when a customer needs more features, usage, or seats
  • Downgrade when usage decreases
  • Migrate users to a new product or price without cancelling their subscription

Plan Change Flow

Prerequisites

Before implementing subscription plan changes, ensure you have:
  • A Dodo Payments merchant account with active subscription products
  • API credentials (API key and webhook secret key) from the dashboard
  • An existing active subscription to modify
  • Webhook endpoint configured to handle subscription events
विस्तृत setup निर्देशों के लिए Integration Guide देखें।

Step-by-Step Implementation Guide

Follow this comprehensive guide to implement subscription plan changes in your application:
1

Understand Plan Change Requirements

Before implementing, determine:
  • Which subscription products can be changed to which others
  • What proration mode fits your business model
  • How to handle failed plan changes gracefully
  • Which webhook events to track for state management
Test plan changes thoroughly in test mode before implementing in production.
2

Choose Your Proration Strategy

Select the billing approach that aligns with your business needs:
इसके लिए उपयुक्त: वे SaaS applications जो पुराने plan के अप्रयुक्त समय का credit देना चाहते हैं।
  • वर्तमान cycle के अप्रयुक्त हिस्से का समय शेष रहने के आधार पर prorated credit देता है
  • फिर नए plan पर पूरे cycle का charge लेता है — नए plan की price कभी prorated नहीं होती
  • Net charge = पूरा नया cycle − (शेष अंश × पूरा पुराना cycle)
3

Implement the Change Plan API

Use the Change Plan API to modify subscription details:
string
आवश्यक
The ID of the active subscription to modify.
string
आवश्यक
The new product ID to change the subscription to.
integer
आवश्यक
Number of units for the new plan (for seat-based products).
string
आवश्यक
How to handle immediate billing: prorated_immediately, full_immediately, difference_immediately, or do_not_bill.
array
नई योजना के लिए वैकल्पिक ऐड-ऑन। इस फ़ील्ड को छोड़ने, null भेजने या एक खाली array भेजने से कोई भी मौजूदा ऐड-ऑन हट जाते हैं, इसलिए उन्हें बनाए रखने के लिए वर्तमान ऐड-ऑन शामिल करें।
string
Controls behavior when the plan change payment fails:
  • prevent_change: Keep subscription on current plan until payment succeeds
  • apply_change (default): Apply plan change immediately regardless of payment outcome
If not specified, uses the business-level default setting.
Subscription के saved payment method से charge करने के बजाय, payment link के माध्यम से plan-change राशि collect करें। Customer hosted checkout page पर भुगतान करता है।इसके लिए business की allow_plan_change_via_payment_link capability (Settings → Subscriptions → Collect Plan Change Payments by Payment Link), effective_at: immediately और on_payment_failure: prevent_change आवश्यक हैं। Collecting Payment via a Checkout Link देखें। Preview route इसे अनदेखा करता है।
array
नए plan पर लागू करने के लिए वैकल्पिक stacked discount codes (अधिकतम 20, array order में लागू)। व्यवहार इस बात पर निर्भर करता है कि आप क्या pass करते हैं:
  • Not provided / null — यदि नए product पर लागू हों, तो preserve_on_plan_change=true वाले मौजूदा discounts सुरक्षित रखे जाते हैं।
  • [] (empty array) — subscription से सभी मौजूदा discounts हटा देता है।
  • ["CODE_A", "CODE_B", ...] — किसी भी मौजूदा discount को इस stacked set से replace करता है।
string
अप्रचलित
Deprecated — नए integrations के लिए discount_codes को प्राथमिकता दें। यह field backward compatibility के लिए अभी भी काम करता है, लेकिन उसी request में इसे discount_codes के साथ combine नहीं किया जा सकता।
string
डिफ़ॉल्ट:"immediately"
Plan change कब लागू करना है:
  • immediately (default): Plan change तुरंत लागू करें
  • next_billing_date: Change को अगली billing date के लिए schedule करें। Billing period समाप्त होने तक customer अपना वर्तमान plan रखता है। Downgrades के लिए इसका उपयोग करें, ताकि customers billing period के अंत तक अपने वर्तमान plan के benefits बनाए रखें।
4

Handle Webhook Events

Plan change के outcomes track करने के लिए webhook handling setup करें:
  • subscription.active: Plan change सफल, subscription updated
  • subscription.plan_changed: Subscription plan changed (upgrade/downgrade/addon update)
  • subscription.on_hold: Plan change charge विफल, renewals stopped
  • payment.succeeded: Plan change का immediate charge सफल
  • payment.failed: Immediate charge विफल
Webhook signatures को हमेशा verify करें और idempotent event processing लागू करें।
5

Update Your Application State

Webhook events के आधार पर अपना application update करें:
  • नए plan के आधार पर features grant/revoke करें
  • नए plan के details के साथ customer dashboard update करें
  • Plan changes के बारे में confirmation emails भेजें
  • Audit purposes के लिए billing changes log करें
6

Test and Monitor

अपने implementation का thoroughly test करें:
  • अलग-अलग scenarios के साथ सभी proration modes test करें
  • Verify करें कि webhook handling सही तरह काम कर रही है
  • Plan change success rates monitor करें
  • Failed plan changes के लिए alerts setup करें
आपका subscription plan change implementation अब production use के लिए तैयार है।

Plan Changes का Preview लें

Plan change को commit करने से पहले, customers को ठीक-ठीक दिखाने के लिए Preview API का उपयोग करें कि उनसे कितना charge लिया जाएगा:
Customers के plan change confirm करने से पहले उनसे लिए जाने वाले exact amount को दिखाने वाले confirmation dialogs बनाने के लिए preview API का उपयोग करें।

Change Plan API

Active subscription के product, quantity और proration behavior को modify करने के लिए Change Plan API का उपयोग करें।

Quick Start Examples

सफल plan change तुरंत 200 OK लौटाता है — किसी भी charge के वास्तव में settle होने से पहले। Body (ChangePlanResponse) में क्या होगा, यह इस बात पर निर्भर करता है कि change कैसे collect किया गया:
यह response पुष्टि करता है कि request स्वीकार कर ली गई है, charge सफल हुआ है ऐसा नहीं। Ordinary immediate charge के लिए outcome call के तुरंत बाद off-session resolve होता है। collect_via_payment_link request के लिए, customer द्वारा payment पूरा करने तक subscription अपने वर्तमान plan पर रहती है।Webhook (payment.succeeded, payment.failed, subscription.plan_changed) के माध्यम से या GET /subscriptions/{subscription_id} के साथ subscription को दोबारा पढ़कर outcome की पुष्टि करें — payment-link case के लिए What Happens While the Link Is Unpaid देखें।
यदि immediate charge विफल होता है, तो payment सफल होने तक subscription subscription.on_hold पर जा सकती है।
Default रूप से, immediate plan change subscription के saved payment method से सीधे charge करता है। इसके बजाय customer को hosted checkout page पर भेजने के लिए collect_via_payment_link: true सेट करें — यह तब उपयोगी है जब कोई saved payment method न हो या आप चाहते हों कि customer नई price को actively confirm करे।
यह Collect Plan Change Payments by Payment Link toggle को power करता है, जो Settings → Subscriptions में उपलब्ध है और Customer Portal के plan-change flow को checkout के माध्यम से route करता है।

Requirements

collect_via_payment_link: true तभी सफल होता है जब सभी निम्न शर्तें पूरी हों — अन्यथा request 422 के साथ fail होती है:
  • Business में allow_plan_change_via_payment_link capability enabled हो (Settings → Subscriptions → Collect Plan Change Payments by Payment Link)।
  • effective_at, immediately हो (default)। Scheduled change (next_billing_date) को checkout page की आवश्यकता कभी नहीं होती।
  • Effective on_payment_failure, prevent_change पर resolve हो। इसे explicitly भेजना आवश्यक नहीं — यदि business-level default पहले से prevent_change है, तो field छोड़ने पर यह शर्त पूरी हो जाती है। Explicit apply_change, 422 के साथ fail होता है।
collect_via_payment_link किसी भी immediate change पर लागू होता है जिसके परिणामस्वरूप charge होता है, downgrades सहित, बशर्ते ऊपर दी गई requirements पूरी हों।
यदि change का net zero या credit हो, तो कोई payment link जारी नहीं किया जाता: payment_link और अन्य checkout fields null के रूप में लौटते हैं और change तुरंत लागू हो जाता है। यह 422 नहीं है। Link request करने से पहले amount जाँचने के लिए Preview Plan Change को call करें।
सफल request checkout handles लौटाती है:
  • Subscription अपने वर्तमान plan पर रहती है — product_id, recurring_pre_tax_amount और next_billing_date सभी link के paid होने तक अपरिवर्तित रहते हैं।
  • Link pending रहने के दौरान आगे की change-plan request, 409 PendingPlanChangeExists के साथ reject होती है। आवश्यकता होने पर scheduled change को DELETE /subscriptions/{subscription_id}/change-plan/scheduled से cancel करें, लेकिन वह endpoint pending payment-link change को cancel नहीं करता — केवल सफल payment या expiry ही ऐसा करता है।
  • Decline के बाद customer उसी checkout session पर card retry कर सकता है; नई change-plan call retry path नहीं है।
  • यदि link कभी paid नहीं होता, तो expires_on के बाद वह काम करना बंद कर देता है — subscription शीघ्र ही नए plan-change request को स्वीकार करने के लिए स्वतः free हो जाती है।
  • यदि कोई scheduled change पहले से मौजूद था और आप उसे cancel_scheduled_change_plan: true से replace करते हैं, तो link unpaid रहने तक original schedule बना रहता है और link paid होने पर ही cancel होता है — उसी transaction में जिसमें नया plan लागू होता है।
जब immediate payment-link change जारी हो जाता है, तो उस subscription पर आगे के प्रत्येक plan-change request — side-effect-free preview सहित — link resolve होने तक blocked रहते हैं। ऐसा link जारी न करें जिसे आप customer से तुरंत pay करवाना नहीं चाहते।

Addons Manage करना

Subscription plans बदलते समय आप addons को भी modify कर सकते हैं:
Addons proration calculation में शामिल होते हैं और चुने गए proration mode के अनुसार charge किए जाते हैं।

Discount Codes लागू करना

Subscription plans बदलते समय एक या अधिक stacked discount codes लागू करें (अधिकतम 20, array order में लागू):

Plan Change पर Discount Behavior

इस endpoint का singular discount_code field deprecated है, लेकिन backward compatibility के लिए अभी भी काम करता है — मौजूदा integrations को तुरंत बदलने की आवश्यकता नहीं है। इसे उसी request में discount_codes के साथ combine नहीं किया जा सकता। सुविधा के अनुसार array form पर migrate करें।
Plan change confirm करने से पहले customers को यह दिखाने के लिए कि वे कितना save करेंगे, discount_codes के साथ Preview Plan Change API का उपयोग करें।

Proration Modes

Plans बदलते समय customer को bill करने का तरीका चुनें:

prorated_immediately

  • वर्तमान cycle — base plan, quantity और add-ons — के अप्रयुक्त हिस्से का समय शेष रहने के आधार पर prorated credit देता है
  • फिर नए plan, quantity और add-ons पर पूरे cycle का charge लेता है। Charge स्वयं कभी prorated नहीं होता
  • Net immediate charge = (पूरा नया cycle) − (शेष अंश × पूरा पुराना cycle)
  • यदि credit नए cycle charge से अधिक हो (जो downgrades में सामान्य है), तो अंतर subscription-scoped credit के रूप में future renewals के लिए रखा जाता है
  • यदि trial में है, तो तुरंत charge करता है और अभी नए plan पर switch करता है

full_immediately

  • नए plan की पूरी amount तुरंत charge करता है
  • पुराने plan का शेष समय अनदेखा करता है — वर्तमान cycle के लिए कोई credit नहीं
prorated_immediately और difference_immediately का उपयोग करने वाले downgrades से बनाए गए credits subscription-scoped होते हैं और Credit-Based Billing entitlements से अलग होते हैं। वे उसी subscription के future renewals पर स्वतः लागू होते हैं और subscriptions के बीच transfer नहीं किए जा सकते।

difference_immediately

  • Upgrade: पुराने और नए plans के बीच price difference तुरंत charge करता है
  • Downgrade: शेष value को subscription में internal credit के रूप में जोड़ता है और renewals पर स्वतः लागू करता है

do_not_bill

  • कोई charges या credits calculate नहीं किए जाते
  • Customer बिना किसी billing adjustment के तुरंत नए plan पर switch करता है
  • Billing cycle अपरिवर्तित रहता है
  • Courtesy migrations, free plan switches या cost differences को absorb करने के लिए उपयुक्त

Example Scenarios

इन canonical numbers का लगातार उपयोग करें:
  • Current plan: Basic at $30/month
  • Upgrade target: Pro at $80/month
  • Downgrade target (from Pro): Starter at $20/month
  • Billing cycle: 30 days, started on January 1
  • Plan change happens on January 16 (15 days remaining, 15 days used)

प्रत्येक Mode Billing को कैसे Process करता है

पुराने plan के अप्रयुक्त समय का credit देते हुए नए plan के पूरे cycle का charge लेने के लिए prorated_immediately चुनें; billing restart करने के लिए full_immediately चुनें; simple upgrades और downgrades पर automatic credit के लिए difference_immediately का उपयोग करें; या बिना किसी billing adjustment के plans switch करने के लिए do_not_bill का उपयोग करें।

Payment Failures Handle करना

on_payment_failure parameter का उपयोग करके नियंत्रित करें कि plan change payment विफल होने पर क्या होगा।

Payment Failure Modes

यदि specified नहीं है, तो on_payment_failure parameter dashboard में configured business-level default setting का उपयोग करता है।

प्रत्येक Mode का उपयोग कब करें

Business & Collection Defaults

Settings → Subscriptions के अंतर्गत business level पर default upgrade और downgrade behavior सेट करें। ये defaults सभी customer-portal plan changes पर लागू होते हैं और इन्हें per product collection override किया जा सकता है। Upgrades और downgrades के लिए अलग-अलग defaults मौजूद हैं: Business defaults को Settings → Subscriptions के अंतर्गत और collection overrides को प्रत्येक product collection पर configure करें। प्रत्येक collection field independent है — business default से inherit करने के लिए इसे unset छोड़ें, या override करने के लिए value सेट करें।

Resolution Order

किसी भी plan change के लिए प्रत्येक setting इस order में resolve होती है:
Change Plan API को explicitly दी गई value हमेशा प्राथमिकता लेती है। Business और collection defaults तभी लागू होते हैं जब कोई explicit value न दी गई हो — customer portal से शुरू किए गए सभी plan changes में यही स्थिति होती है।
एक सामान्य setup: upgrades को immediately + difference_immediately पर रखें, ताकि customers difference pay करें और उन्हें तुरंत access मिले; downgrades को next_billing_date पर रखें, ताकि cycle समाप्त होने तक customers अपना वर्तमान plan बनाए रखें।

Webhooks Handle करना

Plan changes और payments की पुष्टि करने के लिए webhooks के माध्यम से subscription state track करें।

Handle करने योग्य Event Types

  • subscription.active: subscription activated
  • subscription.plan_changed: subscription plan changed (upgrade/downgrade/addon changes)
  • subscription.on_hold: charge failed, renewals stopped
  • subscription.renewed: renewal succeeded
  • payment.succeeded: plan change या renewal का payment सफल
  • payment.failed: payment failed
Business logic को subscription events से संचालित करें और confirmation तथा reconciliation के लिए payment events का उपयोग करें।

Signatures Verify करें और Intents Handle करें

विस्तृत payload schemas के लिए Subscription webhook payloads और Payment webhook payloads देखें।

Best Practices

Plan Change Strategy

  • Thoroughly test करें: Production से पहले plan changes को हमेशा test mode में test करें
  • Proration सावधानी से चुनें: अपने business model के अनुरूप proration mode चुनें
  • Failures को gracefully handle करें: उचित error handling और retry logic लागू करें
  • Success rates monitor करें: Plan change success/failure rates track करें और issues की जाँच करें

Webhook Implementation

  • Signatures verify करें: Authenticity सुनिश्चित करने के लिए webhook signatures को हमेशा validate करें
  • Idempotency लागू करें: Duplicate webhook events को gracefully handle करें
  • Asynchronously process करें: Heavy operations से webhook responses को block न करें
  • सब कुछ log करें: Debugging और audit purposes के लिए detailed logs बनाए रखें

User Experience

  • स्पष्ट रूप से communicate करें: Customers को billing changes और timing के बारे में सूचित करें
  • Confirmations दें: सफल plan changes के लिए email confirmations भेजें
  • Edge cases handle करें: Trial periods, prorations और failed payments पर विचार करें
  • UI तुरंत update करें: अपने application interface में plan changes reflect करें

सामान्य समस्याएँ और समाधान

Subscription plan changes के दौरान आने वाली typical problems को resolve करें:
Symptoms: API call सफल होती है लेकिन subscription पुराने plan पर बनी रहती हैCommon causes:
  • Webhook processing विफल या delayed है
  • Webhooks प्राप्त होने के बाद application state update नहीं हुई
  • State update के दौरान database transaction issues
Solutions:
  • Retry logic के साथ webhook handling लागू करें
  • State updates के लिए idempotent operations का उपयोग करें
  • Missed webhook events detect और alert करने के लिए monitoring जोड़ें
  • Verify करें कि webhook endpoint accessible है और सही response दे रहा है
Symptoms: Customer downgrade करता है लेकिन credit balance दिखाई नहीं देताCommon causes:
  • Proration mode expectations: difference_immediately के साथ downgrades पूरी plan price difference को credit करते हैं, जबकि prorated_immediately पुराने cycle के अप्रयुक्त समय को credit करता है और फिर नए plan पर पूरे cycle का charge लेता है — इसलिए credit balance तभी बचता है जब वह नए plan price से अधिक हो
  • Credits subscription-specific होते हैं और subscriptions के बीच transfer नहीं होते
  • Credit balance customer dashboard में दिखाई नहीं देता
Solutions:
  • Automatic credits चाहने पर downgrades के लिए difference_immediately का उपयोग करें
  • Customers को समझाएँ कि credits उसी subscription के future renewals पर लागू होते हैं
  • Credit balances दिखाने के लिए customer portal लागू करें
  • Applied credits देखने के लिए next invoice preview check करें
Symptoms: Invalid signature के कारण webhook events reject हो जाते हैंCommon causes:
  • Incorrect webhook secret key
  • Signature verification से पहले raw request body modify की गई
  • गलत signature verification algorithm
Solutions:
  • Dashboard से सही DODO_PAYMENTS_WEBHOOK_KEY उपयोग कर रहे हैं, यह verify करें
  • किसी भी JSON parsing middleware से पहले raw request body पढ़ें
  • अपने platform के लिए standard webhook verification library का उपयोग करें
  • Development environment में webhook signature verification test करें
Symptoms: API 422 Unprocessable Entity error लौटाती हैCommon causes:
  • Invalid subscription ID या product ID
  • Subscription active state में नहीं है
  • Required parameters missing हैं
  • Product plan changes के लिए available नहीं है
Solutions:
  • Verify करें कि subscription मौजूद और active है
  • Check करें कि product ID valid और available है
  • सुनिश्चित करें कि सभी required parameters दिए गए हैं
  • Parameter requirements के लिए API documentation review करें
Symptoms: Plan change initiate हुआ लेकिन immediate charge विफल हो गयाCommon causes:
  • Customer के payment method में insufficient funds
  • Payment method expired या invalid है
  • Bank ने transaction decline कर दिया
  • Fraud detection ने charge block कर दिया
Solutions:
  • payment.failed webhook events को उचित रूप से handle करें
  • Customer को payment method update करने के लिए सूचित करें
  • Temporary failures के लिए retry logic लागू करें
  • Failed immediate charges के साथ plan changes allow करने पर विचार करें
Symptoms: Plan change charge विफल होता है और subscription on_hold state पर चली जाती हैWhat happens: जब plan change charge विफल होता है, तो subscription स्वतः on_hold state में चली जाती है। Payment method update होने तक subscription स्वतः renew नहीं होगी।Solution: Subscription को reactivate करने के लिए payment method update करेंFailed plan change के बाद on_hold state से subscription reactivate करने के लिए:
  1. Payment method update करें Update Payment Method API का उपयोग करके
  2. Automatic charge creation: API remaining dues के लिए charge स्वतः create करती है
  3. Invoice generation: Charge के लिए invoice generate होती है
  4. Payment processing: नए payment method का उपयोग करके payment process होता है
  5. Reactivation: सफल payment के बाद subscription active state में reactivate हो जाती है
Monitor करने योग्य webhook events:
  • subscription.on_hold: Subscription hold पर रखी गई (plan change charge विफल होने पर प्राप्त)
  • payment.succeeded: Remaining dues का payment सफल (payment method update करने के बाद)
  • subscription.active: सफल payment के बाद subscription reactivated
Best practices:
  • Plan change charge विफल होने पर customers को तुरंत notify करें
  • Payment method update करने के स्पष्ट instructions दें
  • Reactivation status track करने के लिए webhook events monitor करें
  • Temporary payment failures के लिए automatic retry logic लागू करने पर विचार करें

Update Payment Method API Reference

Payment methods update करने और subscriptions reactivate करने के लिए complete API documentation देखें।

अपने Implementation का Testing

अपने subscription plan change implementation का thoroughly test करें:
1

Set up test environment

  • Test API keys और test products का उपयोग करें
  • अलग-अलग plan types के साथ test subscriptions create करें
  • Test webhook endpoint configure करें
  • Monitoring और logging setup करें
2

Test different proration modes

  • विभिन्न billing cycle positions के साथ prorated_immediately test करें
  • Upgrades और downgrades के लिए difference_immediately test करें
  • Billing cycles reset करने के लिए full_immediately test करें
  • No-charge/no-credit plan switches के लिए do_not_bill test करें
  • Verify करें कि credit calculations सही हैं
3

Test webhook handling

  • Verify करें कि सभी relevant webhook events प्राप्त हो रहे हैं
  • Webhook signature verification test करें
  • Duplicate webhook events को gracefully handle करें
  • Webhook processing failure scenarios test करें
4

Test error scenarios

  • Invalid subscription IDs के साथ test करें
  • Expired payment methods के साथ test करें
  • Network failures और timeouts test करें
  • Insufficient funds के साथ test करें
5

Monitor in production

  • Failed plan changes के लिए alerts setup करें
  • Webhook processing times monitor करें
  • Plan change success rates track करें
  • Plan change issues के लिए customer support tickets review करें

Error Handling

अपने implementation में common API errors को gracefully handle करें:

HTTP Status Codes

Plan change request successfully process हुई। Response body एक ChangePlanResponse है जिसमें payment_id, payment_link, client_secret और expires_on हैं। सभी चार nullable हैं, इसलिए ordinary off-session change के लिए body {} के रूप में serialize होती है; सफल collect_via_payment_link request के लिए ये populated होते हैं, जो checkout handles लौटाती है — Collecting Payment via a Checkout Link देखें। यदि on_payment_failure=prevent_change है, तो payment सफल होने तक plan change pending रहती है।
Invalid request parameters। Check करें कि सभी required fields दिए गए हैं और सही format में हैं।
Invalid या missing API key। Verify करें कि आपका DODO_PAYMENTS_API_KEY सही है और उसके पास उचित permissions हैं।
इस subscription के लिए pending plan change पहले से मौजूद है (PendingPlanChangeExists)। Scheduled change के लिए नया change submit करने से पहले इसे DELETE /subscriptions/{subscription_id}/change-plan/scheduled से cancel करें। Pending payment-link change के लिए कोई cancel endpoint नहीं है — customer के pay करने या link expire होने के बाद subscription नया plan-change request स्वीकार करती है।
Subscription inactive या on-demand है, या request collect_via_payment_link के लिए eligible नहीं है — business में capability enabled नहीं है, effective_at, immediately नहीं है, या on_payment_failure, prevent_change नहीं है। Requirements देखें। जो subscription ID मौजूद नहीं है या आपके account से संबंधित नहीं है, वह NOT_FOUND code के साथ 404 लौटाती है।
Server error हुआ। थोड़ी देर बाद request retry करें।

Error Response Format

Errors एक JSON body लौटाती हैं जिसमें code और human-readable message होता है:
पूरी list के लिए Error Codes देखें।

Next Steps

अंतिम संशोधन 28 सितंबर 2026