Change Plan API
Plan Change Preview
Integration Guide
What Is a Subscription Upgrade or Downgrade?
Change a customer’s subscription plan to move them between tiers, adjust quantity for seat-based products, or migrate to a new product. The API automatically calculates prorations and charges based on your chosen billing mode.When to Use 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
Step-by-Step Implementation Guide
Follow this comprehensive guide to implement subscription plan changes in your application:Understand Plan Change Requirements
- 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
Choose Your Proration Strategy
- prorated_immediately
- difference_immediately
- full_immediately
- do_not_bill
- Credits the unused portion of the current cycle, prorated by time remaining
- Then charges a full cycle at the new plan — the new plan price is never prorated
- Net charge = full new cycle − (remaining fraction × full old cycle)
Implement the Change Plan API
prorated_immediately أو full_immediately أو difference_immediately أو do_not_bill.null أو إرسال مصفوفة فارغة إلى إزالة أي إضافات موجودة، لذا يجب تضمين الإضافات الحالية للاحتفاظ بها.prevent_change: إبقاء الاشتراك على الخطة الحالية حتى نجاح الدفعapply_change(الافتراضي): تطبيق تغيير الخطة فورًا بصرف النظر عن نتيجة الدفع
allow_plan_change_via_payment_link capability (Settings → Subscriptions → Collect Plan Change Payments by Payment Link), effective_at: immediately, and on_payment_failure: prevent_change. See Collecting Payment via a Checkout Link. Ignored by the preview route.subscription_id وpayment_id وstatus. يتطلب collect_via_payment_link: true؛ وإلا يفشل الطلب مع 422. راجع إعادة توجيه العميل بعد الدفع.409. راجع استبدال رابط دفع معلّق. يتجاهل مسار المعاينة هذا الحقل.- غير مقدمة /
null— يتم الاحتفاظ بالخصومات الحالية التي تحتوي علىpreserve_on_plan_change=trueإذا كانت تنطبق على المنتج الجديد. [](مصفوفة فارغة) — إزالة جميع الخصومات الحالية من الاشتراك.["CODE_A", "CODE_B", ...]— استبدال أي خصومات حالية بهذه المجموعة المتسلسلة.
discount_codes للتكاملات الجديدة. يظل هذا الحقل يعمل للتوافق مع الإصدارات السابقة، لكن لا يمكن دمجه مع discount_codes في الطلب نفسه.immediately(الافتراضي): تطبيق تغيير الخطة فورًاnext_billing_date: جدولة التغيير لموعد الفوترة التالي. يحتفظ العميل بخطته الحالية حتى انتهاء فترة الفوترة. استخدم هذا الخيار للتخفيضات كي يحتفظ العملاء بمزايا خطتهم الحالية حتى نهاية فترة الفوترة.
Handle Webhook Events
subscription.active: نجاح تغيير الخطة وتحديث الاشتراكsubscription.plan_changed: تغيير خطة الاشتراك (ترقية/تخفيض/تحديث الإضافة)subscription.on_hold: فشل تحصيل مبلغ تغيير الخطة وإيقاف التجديداتpayment.succeeded: نجاح التحصيل الفوري لتغيير الخطةpayment.failed: فشل التحصيل الفوري
Update Your Application State
- منح الميزات أو سحبها بناءً على الخطة الجديدة
- تحديث لوحة تحكم العميل بتفاصيل الخطة الجديدة
- إرسال رسائل بريد إلكتروني لتأكيد تغييرات الخطة
- تسجيل تغييرات الفوترة لأغراض التدقيق
Test and Monitor
- اختبر جميع أوضاع proration في سيناريوهات مختلفة
- تحقق من عمل معالجة webhook بصورة صحيحة
- راقب معدلات نجاح تغيير الخطة
- أعد إعداد تنبيهات لتغييرات الخطة الفاشلة
معاينة تغييرات الخطة
قبل اعتماد تغيير الخطة، استخدم Preview API لعرض المبلغ الذي سيُحصّل من العملاء بدقة:- Node.js SDK
- Python SDK
immediate_charge.summary، يمثل customer_credits صافي التغيير في رصيد ائتمان العميل، بعملة customer_credits_currency. وهذه هي عملة محفظة ائتمان العميل، وهي عملة الاشتراك. وقد تختلف عن currency في الملخص، الذي ينطبق على total_amount وtax. على سبيل المثال، يرى العميل الذي يدفع بالروبية الهندية مقابل اشتراك بالدولار أرصدة ائتمانية بالدولار.Change Plan API
استخدم Change Plan API لتعديل المنتج والكمية وسلوك proration لاشتراك نشط.أمثلة البدء السريع
- Node.js SDK
- Python SDK
- Go SDK
- HTTP
200 OK فورًا — قبل تسوية أي مبلغ فعليًا. ويعتمد محتوى الجسم (ChangePlanResponse) على طريقة تحصيل التغيير:
collect_via_payment_link، فيبقى الاشتراك على خطته الحالية حتى يكمل العميل الدفع.أكد النتيجة عبر webhook (payment.succeeded وpayment.failed وsubscription.plan_changed)، أو أعد قراءة الاشتراك باستخدام GET /subscriptions/{subscription_id} — راجع ما يحدث أثناء عدم دفع الرابط لحالة رابط الدفع.تحصيل الدفع عبر رابط Checkout
افتراضيًا، يخصم تغيير الخطة الفوري المبلغ مباشرةً من طريقة الدفع المحفوظة للاشتراك. اضبطcollect_via_payment_link: true لإرسال العميل إلى صفحة checkout مستضافة بدلًا من ذلك — وهذا مفيد عند عدم وجود طريقة دفع محفوظة أو عند رغبتك في أن يؤكد العميل السعر الجديد بنفسه.
المتطلبات
ينجحcollect_via_payment_link: true فقط عند تحقق جميع الشروط التالية — وإلا يفشل الطلب مع 422:
- يجب تفعيل قدرة
allow_plan_change_via_payment_linkللنشاط التجاري (الإعدادات ← الاشتراكات ← تحصيل دفعات تغيير الخطة عبر رابط الدفع). - يجب أن تكون
effective_atهيimmediately(الافتراضية). لا يحتاج التغيير المجدول (next_billing_date) إلى صفحة checkout. - يجب أن يعيّن الطلب
on_payment_failure: prevent_change. ويفشلapply_changeالصريح مع422.
collect_via_payment_link على أي تغيير فوري ينتج عنه تحصيل، بما في ذلك التخفيضات، ما دامت المتطلبات أعلاه مستوفاة.payment_link وتعود حقول checkout الأخرى null، ويُطبّق التغيير فورًا. هذا ليس 422. استدعِ Preview Plan Change أولًا للتحقق من المبلغ قبل طلب رابط.
- Node.js SDK
- Python SDK
- HTTP
ما يحدث أثناء عدم دفع الرابط
- يبقى الاشتراك على خطته الحالية — ولا يتغير
product_idأوrecurring_pre_tax_amountأوnext_billing_dateحتى دفع الرابط. - يُرفض أي طلب
change-planإضافي مع409 PendingPlanChangeExistsأثناء تعليق الرابط. لاستبدال التغيير المعلّق، أرسل الطلب الجديد معcancel_older_payment_link: true. راجع استبدال رابط دفع معلّق. - لإعادة المحاولة بعد رفض الدفع، استدعِ
change-planمجددًا للحصول على رابط جديد. - إذا لم يُدفع الرابط مطلقًا، فسيتوقف عن العمل بعد
expires_on— ويصبح الاشتراك متاحًا تلقائيًا لقبول طلب تغيير خطة جديد بعد ذلك بوقت قصير. - إذا كان هناك تغيير مجدول مسبقًا واستبدلته بـ
cancel_scheduled_change_plan: true، يظل الجدول الأصلي قائمًا أثناء عدم دفع الرابط ولا يُلغى إلا بعد دفع الرابط — في المعاملة نفسها التي تطبّق الخطة الجديدة.
إعادة توجيه العميل بعد الدفع
اضبطreturn_url لإعادة العميل إلى موقعك بعد دفع الرابط:
return_url باستخدام معلمات query التالية:
return_url وجود collect_via_payment_link: true. وبدونه يفشل الطلب مع 422.
استبدال رابط دفع معلّق
إذا غادر العميل checkout دون الدفع، فعيّنcancel_older_payment_link: true في طلب change-plan التالي. تلغي Dodo Payments الرابط غير المدفوع، ويستبدل تغيير الخطة الجديد التغيير المعلّق. ولا يقبل الرابط الملغى أي دفعة، حتى من صفحة checkout مفتوحة مسبقًا.
change-plan فاتورة خاصة به. ويُلغى تغيير الخطة المستبدل وفاتورته. وإذا لم يكن هناك تغيير خطة معلّق، فلن يكون لـ cancel_older_payment_link أي تأثير.
إدارة Addons
عند تغيير خطط الاشتراك، يمكنك أيضًا تعديل الإضافات:تطبيق رموز الخصم
طبّق رمز خصم متسلسلًا واحدًا أو أكثر عند تغيير خطط الاشتراك (بحد أقصى 20، وتُطبّق بترتيب المصفوفة):- Node.js SDK
- Python SDK
- HTTP
سلوك الخصم عند تغيير الخطة
discount_code المفرد في نقطة النهاية هذه مهمل لكنه لا يزال يعمل للتوافق مع الإصدارات السابقة — ولا تحتاج التكاملات الحالية إلى التغيير فورًا. ولا يمكن دمجه مع discount_codes في الطلب نفسه. انقل التكامل إلى صيغة المصفوفة عندما يناسبك.أوضاع Proration
اختر كيفية فوترة العميل عند تغيير الخطط:prorated_immediately
- إضافة رصيد للجزء غير المستخدم من الدورة الحالية — الخطة الأساسية والكمية والإضافات — محسوبًا تناسبيًا وفق الوقت المتبقي
- ثم تحصيل دورة كاملة بالخطة والكمية والإضافات الجديدة. ولا يُحسب مبلغ التحصيل نفسه تناسبيًا
- صافي التحصيل الفوري = (الدورة الجديدة الكاملة) − (الكسر المتبقي × الدورة القديمة الكاملة)
- إذا تجاوز الرصيد مبلغ الدورة الجديدة (وهو شائع في التخفيضات)، يُحتفظ بالفرق كرصيد خاص بالاشتراك للتجديدات المستقبلية
- أثناء الفترة التجريبية، يتم التحصيل فورًا والتبديل إلى الخطة الجديدة الآن
full_immediately
- تحصيل المبلغ الكامل للخطة الجديدة فورًا
- تجاهل الوقت المتبقي من الخطة القديمة — لا يوجد رصيد للدورة الحالية
prorated_immediately وتلك الناتجة عن التخفيضات باستخدام difference_immediately تكون خاصة بالاشتراك، وهي منفصلة عن استحقاقات Credit-Based Billing. وتُطبّق تلقائيًا على التجديدات المستقبلية للاشتراك نفسه، ولا يمكن نقلها بين الاشتراكات.difference_immediately
- الترقية: تحصيل فرق السعر بين الخطتين القديمة والجديدة فورًا
- التخفيض: إضافة القيمة المتبقية كرصيد داخلي إلى الاشتراك وتطبيقها تلقائيًا عند التجديد
do_not_bill
- لا تُحسب أي تحصيلات أو أرصدة
- ينتقل العميل إلى الخطة الجديدة فورًا دون تعديل في الفوترة
- تبقى دورة الفوترة دون تغيير
- مناسب لعمليات النقل المجانية أو المجاملة أو استيعاب فروق التكلفة
أمثلة على السيناريوهات
استخدم هذه الأرقام الأساسية باستمرار:- الخطة الحالية: Basic بسعر $30/شهر
- هدف الترقية: Pro بسعر $80/شهر
- هدف التخفيض (من Pro): Starter بسعر $20/شهر
- دورة الفوترة: 30 يومًا، بدأت في 1 يناير
- يحدث تغيير الخطة في 16 يناير (15 يومًا متبقية، و15 يومًا مستخدمة)
Upgrade: Basic ($30) → Pro ($80) with prorated_immediately
Upgrade: Basic ($30) → Pro ($80) with prorated_immediately
Downgrade: Pro ($80) → Starter ($20) with prorated_immediately
Downgrade: Pro ($80) → Starter ($20) with prorated_immediately
Upgrade: Basic ($30) → Pro ($80) with difference_immediately
Upgrade: Basic ($30) → Pro ($80) with difference_immediately
Downgrade: Pro ($80) → Starter ($20) with difference_immediately
Downgrade: Pro ($80) → Starter ($20) with difference_immediately
Upgrade: Basic ($30) → Pro ($80) with full_immediately
Upgrade: Basic ($30) → Pro ($80) with full_immediately
Mid-cycle upgrade with add-ons using prorated_immediately
Mid-cycle upgrade with add-ons using prorated_immediately
كيفية معالجة كل وضع للفوترة
معالجة حالات فشل الدفع
تحكم في ما يحدث عند فشل دفعة تغيير الخطة باستخدام المعلمةon_payment_failure.
أوضاع فشل الدفع
- prevent_change (Recommended for critical upgrades)
- apply_change (Default)
- يُعلّم تغيير الخطة بأنه “معلّق”
- يحتفظ العميل بإمكانية الوصول إلى خطته الحالية
- ينتقل الاشتراك إلى حالة
activeفقط بعد نجاح الدفع - مفيد عند الرغبة في ضمان الدفع قبل منح الميزات المُرقّاة
on_payment_failure إعدادك الافتراضي على مستوى النشاط التجاري والمكوّن في لوحة التحكم.متى تستخدم كل وضع
الإعدادات الافتراضية للنشاط التجاري والتحصيل
عيّن سلوك الترقية والتخفيض الافتراضي على مستوى النشاط التجاري ضمن الإعدادات ← الاشتراكات. وتنطبق هذه الإعدادات الافتراضية على جميع تغييرات الخطة في بوابة العملاء، ويمكن تجاوزها لكل مجموعة منتجات. توجد إعدادات افتراضية منفصلة للترقيات والتخفيضات:ترتيب تحديد القيمة
بالنسبة إلى أي تغيير خطة، تُحدّد قيمة كل إعداد بالترتيب التالي:معالجة Webhooks
تتبّع حالة الاشتراك عبر webhooks لتأكيد تغييرات الخطة والمدفوعات.أنواع الأحداث التي يجب معالجتها
subscription.active: تفعيل الاشتراكsubscription.plan_changed: تغيير خطة الاشتراك (ترقية/تخفيض/تغييرات الإضافات)subscription.on_hold: فشل التحصيل وإيقاف التجديداتsubscription.renewed: نجاح التجديدpayment.succeeded: نجاح الدفع الخاص بتغيير الخطة أو التجديدpayment.failed: فشل الدفع
التحقق من التوقيعات ومعالجة النوايا
- Next.js Route Handler
- Express.js
أفضل الممارسات
استراتيجية تغيير الخطة
- اختبر بدقة: اختبر دائمًا تغييرات الخطة في وضع الاختبار قبل الإنتاج
- اختر proration بعناية: حدّد وضع proration المتوافق مع نموذج نشاطك التجاري
- تعامل مع حالات الفشل بسلاسة: طبّق معالجة مناسبة للأخطاء ومنطقًا لإعادة المحاولة
- راقب معدلات النجاح: تتبّع معدلات نجاح وفشل تغيير الخطة وحقق في المشكلات
تطبيق Webhook
- تحقق من التوقيعات: تحقق دائمًا من توقيعات webhook لضمان الأصالة
- طبّق idempotency: عالج أحداث webhook المكررة بسلاسة
- عالج الأحداث بشكل غير متزامن: لا تحظر استجابات webhook بعمليات ثقيلة
- سجّل كل شيء: احتفظ بسجلات مفصلة لتصحيح الأخطاء وأغراض التدقيق
تجربة المستخدم
- تواصل بوضوح: أبلغ العملاء بتغييرات الفوترة وتوقيتها
- وفّر التأكيدات: أرسل رسائل بريد إلكتروني لتأكيد تغييرات الخطة الناجحة
- تعامل مع الحالات الحدّية: ضع الفترات التجريبية وproration والمدفوعات الفاشلة في الاعتبار
- حدّث الواجهة فورًا: اعكس تغييرات الخطة في واجهة تطبيقك
المشكلات الشائعة والحلول
حل المشكلات المعتادة التي تحدث أثناء تغييرات خطة الاشتراك:Charge created but subscription not updated
Charge created but subscription not updated
- فشلت معالجة webhook أو تأخرت
- لم تُحدّث حالة التطبيق بعد استلام webhooks
- مشكلات في معاملة قاعدة البيانات أثناء تحديث الحالة
- طبّق معالجة webhook مع منطق لإعادة المحاولة
- استخدم عمليات idempotent لتحديث الحالة
- أضف المراقبة لاكتشاف أحداث webhook الفائتة والتنبيه إليها
- تحقق من إمكانية الوصول إلى نقطة نهاية webhook واستجابتها بصورة صحيحة
Credits not applied after downgrade
Credits not applied after downgrade
- توقعات وضع proration: تمنح التخفيضات رصيد فرق سعر الخطة الكامل باستخدام
difference_immediately، بينما يمنحprorated_immediatelyرصيد الوقت غير المستخدم في الدورة القديمة ثم يحصّل دورة كاملة بالخطة الجديدة — لذلك لا يبقى رصيد إلا عندما يتجاوز ذلك الرصيد سعر الخطة الجديدة - الأرصدة خاصة بالاشتراك ولا تنتقل بين الاشتراكات
- رصيد الائتمان غير ظاهر في لوحة تحكم العميل
- استخدم
difference_immediatelyللتخفيضات عندما تريد أرصدة تلقائية - وضّح للعملاء أن الأرصدة تُطبّق على التجديدات المستقبلية للاشتراك نفسه
- طبّق Customer Portal لعرض الأرصدة الائتمانية
- تحقق من معاينة الفاتورة التالية لرؤية الأرصدة المطبّقة
Webhook signature verification fails
Webhook signature verification fails
- مفتاح webhook السري غير صحيح
- تعديل جسم الطلب الخام قبل التحقق من التوقيع
- خوارزمية تحقق من التوقيع غير صحيحة
- تحقق من استخدام
DODO_PAYMENTS_WEBHOOK_KEYالصحيح من لوحة التحكم - اقرأ جسم الطلب الخام قبل أي middleware لتحليل JSON
- استخدم مكتبة التحقق القياسية من webhook لمنصتك
- اختبر التحقق من توقيع webhook في بيئة التطوير
Plan change fails with 422 error
Plan change fails with 422 error
- معرّف اشتراك أو منتج غير صالح
- الاشتراك ليس في حالة نشطة
- معلمات مطلوبة مفقودة
- المنتج غير متاح لتغييرات الخطة
- تحقق من وجود الاشتراك وكونه نشطًا
- تحقق من صلاحية معرّف المنتج وتوفره
- تأكد من توفير جميع المعلمات المطلوبة
- راجع وثائق API لمعرفة متطلبات المعلمات
Immediate charge fails during plan change
Immediate charge fails during plan change
- عدم كفاية الأموال في طريقة دفع العميل
- انتهاء صلاحية طريقة الدفع أو عدم صلاحيتها
- رفض البنك للمعاملة
- حظر التحصيل بواسطة اكتشاف الاحتيال
- عالج أحداث webhook الخاصة بـ
payment.failedبصورة مناسبة - أبلغ العميل بتحديث طريقة الدفع
- طبّق منطق إعادة المحاولة لحالات الفشل المؤقتة
- فكّر في السماح بتغييرات الخطة مع فشل التحصيلات الفورية
Subscription on hold after plan change
Subscription on hold after plan change
on_holdما يحدث:
عند فشل تحصيل تغيير الخطة، يُوضَع الاشتراك تلقائيًا في حالة on_hold. ولن يُجدّد الاشتراك تلقائيًا حتى تُحدّث طريقة الدفع.الحل: حدّث طريقة الدفع لإعادة تفعيل الاشتراكلإعادة تفعيل اشتراك من حالة on_hold بعد فشل تغيير الخطة:- حدّث طريقة الدفع باستخدام Update Payment Method API
- إنشاء التحصيل تلقائيًا: تنشئ API تحصيلًا تلقائيًا للمبالغ المستحقة المتبقية
- إنشاء الفاتورة: تُنشأ فاتورة للتحصيل
- معالجة الدفع: تُعالج الدفعة باستخدام طريقة الدفع الجديدة
- إعادة التفعيل: عند نجاح الدفع، يُعاد تفعيل الاشتراك إلى حالة
active
subscription.on_hold: وضع الاشتراك قيد التعليق (يُستلم عند فشل تحصيل تغيير الخطة)payment.succeeded: نجاح دفع المبالغ المستحقة المتبقية (بعد تحديث طريقة الدفع)subscription.active: إعادة تفعيل الاشتراك بعد نجاح الدفع
- أبلغ العملاء فورًا عند فشل تحصيل تغيير الخطة
- وفّر تعليمات واضحة حول كيفية تحديث طريقة الدفع
- راقب أحداث webhook لتتبع حالة إعادة التفعيل
- فكّر في تطبيق منطق إعادة المحاولة التلقائية لفشل الدفع المؤقت
Update Payment Method API Reference
اختبار تطبيقك
اختبر تطبيق تغيير خطة الاشتراك بدقة:Set up test environment
- استخدم مفاتيح API ومنتجات الاختبار
- أنشئ اشتراكات اختبار بأنواع خطط مختلفة
- اضبط نقطة نهاية webhook للاختبار
- أعد إعداد المراقبة والتسجيل
Test different proration modes
- اختبر
prorated_immediatelyمع مواضع مختلفة في دورة الفوترة - اختبر
difference_immediatelyللترقيات والتخفيضات - اختبر
full_immediatelyلإعادة ضبط دورات الفوترة - اختبر
do_not_billلتبديلات الخطط دون تحصيل أو رصيد - تحقق من صحة حسابات الأرصدة
Test webhook handling
- تحقق من استلام جميع أحداث webhook ذات الصلة
- اختبر التحقق من توقيع webhook
- عالج أحداث webhook المكررة بسلاسة
- اختبر سيناريوهات فشل معالجة webhook
Test error scenarios
- اختبر باستخدام معرّفات اشتراك غير صالحة
- اختبر باستخدام طرق دفع منتهية الصلاحية
- اختبر حالات فشل الشبكة وانتهاء المهلة
- اختبر باستخدام أموال غير كافية
Monitor in production
- أعد إعداد تنبيهات لتغييرات الخطة الفاشلة
- راقب أوقات معالجة webhook
- تتبّع معدلات نجاح تغيير الخطة
- راجع تذاكر دعم العملاء بحثًا عن مشكلات تغيير الخطة
معالجة الأخطاء
عالج أخطاء API الشائعة بسلاسة في تطبيقك:رموز حالة HTTP
200 OK
200 OK
ChangePlanResponse مع payment_id وpayment_link وclient_secret وexpires_on. وجميعها الأربعة قابلة لأن تكون null، لذلك يُسلسل الجسم كـ {} في حالة التغيير العادي خارج الجلسة؛ وتُملأ عند نجاح طلب collect_via_payment_link، الذي يُرجع معرّفات checkout — راجع تحصيل الدفع عبر رابط Checkout. وإذا كان on_payment_failure=prevent_change، يظل تغيير الخطة معلّقًا حتى نجاح الدفع.400 Bad Request
400 Bad Request
409 Conflict
409 Conflict
PendingPlanChangeExists). بالنسبة إلى تغيير مجدول، ألغِه باستخدام DELETE /subscriptions/{subscription_id}/change-plan/scheduled قبل إرسال تغيير جديد. وبالنسبة إلى تغيير عبر رابط دفع معلّق، أرسل الطلب الجديد مع cancel_older_payment_link: true لاستبداله. راجع استبدال رابط دفع معلّق.عند استخدام cancel_older_payment_link: true، يعني 409 أن العميل يدفع الرابط السابق الآن (PLAN_CHANGE_PAYMENT_IN_PROGRESS) أو دفعه بالفعل (PLAN_CHANGE_PAYMENT_ALREADY_COMPLETED).422 Unprocessable Entity
422 Unprocessable Entity
collect_via_payment_link — إذ لم يفعّل النشاط التجاري القدرة، أو أن effective_at ليست immediately، أو أن on_payment_failure ليست prevent_change. راجع المتطلبات. ويُرجع معرّف الاشتراك غير الموجود أو غير التابع لحسابك 404 مع رمز NOT_FOUND.500 Internal Server Error
500 Internal Server Error
تنسيق استجابة الخطأ
تُرجع الأخطاء جسم JSON يحتوي علىcode وmessage قابل للقراءة البشرية:
الخطوات التالية
- راجع Change Plan API
- استكشف Credit-Based Billing
- طبّق تنبيهات لـ
subscription.on_hold - اطّلع على دليل تكامل Webhook