Skip to main content
Subscriptions tự động hóa doanh thu định kỳ. Tạo chu kỳ thanh toán linh hoạt, thời gian dùng thử miễn phí hoặc có tính phí, thay đổi gói có phân bổ theo tỷ lệ và tiện ích bổ sung. Khách hàng sẽ tự động gia hạn cho đến khi hủy hoặc thời hạn kết thúc.

Upgrade & Downgrade

Control plan changes with proration and quantity updates.

On‑Demand Subscriptions

Authorize a mandate now and charge later with custom amounts.

Customer Portal

Let customers manage plans, billing, and cancellations.

Subscription Webhooks

React to lifecycle events like created, renewed, and canceled.

What Are Subscriptions?

Subscription là một sản phẩm định kỳ tính phí khách hàng theo lịch. Phù hợp cho SaaS, gói thành viên, nội dung số và các gói hỗ trợ.
  • SaaS licenses: Apps, APIs, or platform access
  • Memberships: Communities, programs, or clubs
  • Digital content: Courses, media, or premium content
  • Support plans: SLAs, success packages, or maintenance

Key Benefits

  • Doanh thu có thể dự đoán: Thanh toán định kỳ với gia hạn tự động
  • Chu kỳ linh hoạt: Hàng tháng, hàng năm, khoảng thời gian tùy chỉnh và thời gian dùng thử
  • Linh hoạt về gói: Phân bổ theo tỷ lệ khi nâng cấp và hạ cấp
  • Tiện ích bổ sung và số lượng chỗ: Gắn các nâng cấp tùy chọn có thể định lượng
  • Checkout được lưu trữ: Các trang Checkout và Customer Portal
  • Ưu tiên nhà phát triển: API rõ ràng để tạo, thay đổi và theo dõi mức sử dụng

Creating Subscriptions

Tạo sản phẩm subscription trong dashboard Dodo Payments, sau đó bán chúng thông qua checkout hoặc API của bạn. Việc tách sản phẩm khỏi các subscription đang hoạt động cho phép bạn quản lý phiên bản giá, gắn tiện ích bổ sung và theo dõi hiệu suất độc lập.

Tạo sản phẩm Subscription

Configure the fields in the dashboard to define how your subscription sells, renews, and bills. The sections below map directly to what you see in the creation form.

Thông tin sản phẩm

  • Tên sản phẩm (bắt buộc): Tên hiển thị trong checkout, Customer Portal và hóa đơn.
  • Mô tả sản phẩm (tùy chọn): Nội dung nêu rõ giá trị, xuất hiện trong checkout và hóa đơn.
  • Hình ảnh sản phẩm (tùy chọn): PNG/JPG/WebP tối đa 3 MB. Được sử dụng trong checkout và hóa đơn.
  • Thương hiệu: Liên kết sản phẩm với một thương hiệu cụ thể để áp dụng giao diện và email.
  • Danh mục thuế (bắt buộc): Chọn danh mục (ví dụ: SaaS) để xác định các quy tắc thuế.
Pick the most accurate tax category to ensure correct tax collection per region.

Pricing

  • Loại giá: Chọn Subscription (theo hướng dẫn này). Các lựa chọn khác là Single Payment và Usage Based Billing.
  • Giá (bắt buộc): Giá định kỳ cơ bản kèm đơn vị tiền tệ. Giá khác 0 phải ít nhất là $1 (hoặc giá trị tương đương theo đơn vị tiền tệ đã chọn) — các khoản thấp hơn mức tối thiểu này không được hỗ trợ. Giá chính xác $0 là một trường hợp riêng được hỗ trợ; xem Card-Optional at Zero Price.
  • Discount Applicable (%): Phần trăm giảm giá tùy chọn áp dụng cho giá cơ bản; được thể hiện trong checkout và hóa đơn.
  • Repeat payment every (bắt buộc): Khoảng thời gian giữa các lần gia hạn, ví dụ mỗi 1 Month. Chọn tần suất (tháng hoặc năm) và số lượng.
  • Subscription Period (bắt buộc): Tổng thời hạn subscription duy trì trạng thái hoạt động (ví dụ 10 Years). Sau khi thời hạn này kết thúc, việc gia hạn sẽ dừng trừ khi được kéo dài.
  • Trial Period Days (bắt buộc): Đặt thời lượng dùng thử theo số ngày. Dùng 0 để tắt thời gian dùng thử. Khoản phí đầu tiên sẽ tự động được thu khi thời gian dùng thử kết thúc.
  • Trial Amount: Khoản phí trả trước tùy chọn cho thời gian dùng thử có tính phí. Để trống nếu muốn dùng thử miễn phí. Xem Paid Trials.
  • Card-optional at $0 Price: Cho phép khách hàng bắt đầu subscription mà không cần thêm thẻ khi giá là $0 hoặc khoản giảm giá khiến hôm nay không còn khoản phải trả. Thời gian dùng thử miễn phí có checkbox riêng Start the trial without a card. Xem Card-Optional at Zero Price.
  • Select add-on: Gắn tối đa 10 tiện ích bổ sung mà khách hàng có thể mua cùng gói cơ bản.
Việc chỉnh sửa giá của một sản phẩm đang hoạt động sẽ thay đổi số tiền mà khách hàng mới phải trả. Subscription hiện tại không bao giờ được định giá lại — mỗi subscription giữ nguyên mức giá tại thời điểm được tạo và tiếp tục gia hạn với mức giá đó miễn là vẫn còn hoạt động.Để chuyển một subscriber hiện tại sang mức giá khác, hãy thay đổi gói của họ một cách rõ ràng bằng Change Plan, hoặc cho phép họ tự chuyển qua Customer Portal nếu bạn đã bật tính năng tự phục vụ thay đổi gói. Cài đặt proration của bạn áp dụng cho việc thay đổi gói đó, không áp dụng cho việc chỉnh sửa giá sản phẩm.
Tiện ích bổ sung phù hợp cho các phần mở rộng có thể định lượng như số lượng chỗ hoặc dung lượng lưu trữ. Bạn có thể kiểm soát số lượng được phép và cách phân bổ theo tỷ lệ khi khách hàng thay đổi chúng.

Cài đặt nâng cao

  • Tax Inclusive Pricing: Hiển thị giá đã bao gồm các loại thuế áp dụng. Phép tính thuế cuối cùng vẫn thay đổi tùy theo vị trí của khách hàng.
  • Generate license keys: Cấp một key duy nhất cho mỗi khách hàng sau khi mua. Xem hướng dẫn License Keys.
  • Digital Product Delivery: Tự động cung cấp tệp hoặc nội dung sau khi mua. Tìm hiểu thêm trong Digital Product Delivery.
  • Metadata: Đính kèm các cặp key–value tùy chỉnh để gắn thẻ nội bộ hoặc tích hợp với client. Xem Metadata.
Dùng metadata để lưu các identifier từ hệ thống của bạn (ví dụ accountId), giúp bạn đối soát các event và hóa đơn sau này.

Subscription Trials

Thời gian dùng thử cho phép khách hàng đánh giá subscription trước khi thanh toán toàn bộ giá định kỳ. Thời gian dùng thử có thể miễn phí (không tính phí cho đến khi kết thúc) hoặc có tính phí (một khoản giảm giá được thu trước). Sau thời gian dùng thử, giá đầy đủ sẽ được thu vào lần gia hạn đầu tiên.

Cấu hình Trial

Đặt Trial Period Days trong phần định giá của sản phẩm (dùng 0 để tắt). Ghi đè giá trị này khi tạo subscription:
trial_period_days phải nằm trong khoảng từ 0 đến 10.000 ngày.
Thu một khoản phí giảm giá trả trước cho thời gian dùng thử. Đặt Trial Amount trên giá của sản phẩm. Giá định kỳ đầy đủ sẽ được thu vào lần gia hạn đầu tiên.
Subscription pricing form with a trial duration and an optional trial amount for a paid trial
Paid trial được cấu hình trên giá của sản phẩm, không phải trên từng subscription hoặc checkout session:
Khoản phí dùng thử chịu thuế và được đưa vào tính toán checkout cũng như định giá payment link. Phụ phí Adaptive Currency áp dụng theo từng đơn vị tiền tệ. preview endpoint trả về trial_amount và trial_period_days để bạn có thể hiển thị số tiền phải trả hôm nay trước khi tạo subscription.

Card-Optional at Zero Price

Cho phép khách hàng bắt đầu subscription mà không cần thêm payment method khi hôm nay không có khoản nào phải trả. Bật tùy chọn này theo từng mức giá trong phần định giá sản phẩm, với một checkbox cho mỗi trường hợp bên dưới.
Subscription pricing form with the Card-Optional at $0 Price checkbox next to Trial Period and Default Discount
Có hai trường hợp không có khoản nào phải trả hôm nay:
  • Thời gian dùng thử miễn phí: trial_period_days được đặt nhưng không có trial_amount, vì vậy khoản phí đầu tiên là $0 trong thời gian dùng thử. Chọn Start the trial without a card bên dưới Trial Period (Days).
  • Giá định kỳ $0: Giá tự thân là $0 hoặc một khoản giảm giá đưa giá xuống $0 (mục Default Discount (%) của sản phẩm hoặc mã giảm giá được áp dụng tại checkout). Chọn Card-optional at $0 Price.
Paid trial luôn yêu cầu thẻ. Việc đặt Trial Amount có nghĩa là có khoản phải trả, nên yêu cầu về thẻ vẫn được bật.
Mỗi checkbox tương ứng với một trường API riêng: trial_payment_method_optional (trường hợp dùng thử miễn phí) và zero_amount_payment_method_optional (trường hợp giá $0). Bạn có thể bật từng tùy chọn riêng lẻ.
Trong API, checkbox duy nhất trên dashboard này ánh xạ tới hai field độc lập trên mức giá: trial_payment_method_optional (cho trường hợp free trial) và zero_amount_payment_method_optional (cho trường hợp giá 0vaˋdiscount).Checkboxtre^ndashboardđặtcảhaifieldcuˋngluˊc.Ne^ˊuquảnlyˊsảnphẩmtrựctie^ˊpquaAPI,bạncoˊthểbậttừngfieldđộclập—vıˊdụ,freetrialva^~nye^uca^ˋuthẻnhưngmộtla^ˋngiahạn0 và discount). Checkbox trên dashboard đặt cả hai field cùng lúc. Nếu quản lý sản phẩm trực tiếp qua API, bạn có thể bật từng field độc lập — ví dụ, free trial vẫn yêu cầu thẻ nhưng một lần gia hạn 0 đã giảm giá riêng lại không yêu cầu thẻ.

Điều gì xảy ra khi không có thẻ

Subscription không yêu cầu thẻ được tạo và kích hoạt ngay lập tức, với payment_method_required: false trong response và không có payment method được lưu. Từ đó:
  1. Email nhắc nhở được gửi trước khi bắt đầu tính phí thực tế. Số ngày nhắc trước được thiết lập trên toàn doanh nghiệp tại Payment Method Reminder trong Settings → Subscriptions — xem Subscription Settings. Email Add Payment Method Reminder của khách hàng (xem Customer Emails) dẫn trực tiếp đến Customer Portal để thêm thẻ.
  2. Nếu không thêm thẻ kịp thời, subscription sẽ chuyển sang on_hold khi trial kết thúc hoặc thời gian giảm giá hết hạn và khoản phí thực tế đến hạn — cùng trạng thái on_hold mà mọi subscription đều có thể chuyển sang, nhưng lần này là do chưa từng thêm payment method. Khách hàng sẽ nhận email Subscription On Hold, No Payment Method.
  3. Thêm payment method sẽ kích hoạt lại subscription, đúng như mô tả trong Reactivating from On Hold — một khoản phí được tạo cho số tiền hiện đến hạn và subscription trở về active sau khi thanh toán thành công.
Subscriptions settings tab showing the Payment Method Reminder days field
Thẻ được thêm trước khi trial hoặc thời gian giảm giá kết thúc sẽ ngăn hoàn toàn trạng thái on hold — lần gia hạn tiếp theo chỉ tính phí vào thẻ đó, không khác bất kỳ subscription nào khác.
Bạn không thể đặt next_billing_date thành thời điểm trong quá khứ. Ngày này phải nằm trong tương lai.

Thay đổi Subscription Plan

Thay đổi plan cho phép bạn nâng cấp hoặc hạ cấp subscription, điều chỉnh số lượng hoặc chuyển sang sản phẩm khác. Tùy theo proration mode được chọn, thay đổi có thể tạo khoản phí ngay lập tức, tạo credit hoặc không điều chỉnh billing.
Bạn có thể thay đổi subscription plan và cập nhật ngày billing tiếp theo trực tiếp từ dashboard Dodo Payments. Đây là cách nhanh chóng để điều chỉnh subscription theo yêu cầu hỗ trợ khách hàng, nâng cấp khuyến mãi hoặc chuyển đổi plan mà không cần gọi API.
Bật tính năng thay đổi plan tự phục vụ: Bạn muốn khách hàng tự nâng cấp hoặc hạ cấp subscription thông qua Customer Portal? Thêm các sản phẩm subscription vào Product Collection và bật “Allow Subscription Updates” trong Subscription Settings.

Product Collections

Nhóm các sản phẩm liên quan vào collections để bật quy trình nâng cấp/hạ cấp liền mạch trong Customer Portal.

Proration Modes

Chọn cách tính phí cho khách hàng khi thay đổi plan:
So sánh nhanh bốn proration mode:

prorated_immediately

Tính phí theo tỷ lệ dựa trên thời gian còn lại trong chu kỳ billing hiện tại. Phù hợp nhất cho cách tính phí công bằng, có tính đến thời gian chưa sử dụng.

difference_immediately

Thu phần chênh lệch giá ngay lập tức (khi nâng cấp) hoặc cộng credit cho các lần gia hạn trong tương lai (khi hạ cấp). Phù hợp nhất cho các trường hợp nâng cấp/hạ cấp đơn giản.
Credit từ việc hạ cấp bằng difference_immediately được giới hạn trong subscription và tự động áp dụng cho các lần gia hạn trong tương lai. Chúng khác với các quyền lợi của Credit-Based Billing.
Khi khách hàng hạ cấp bằng difference_immediately, giá trị chưa sử dụng trở thành credit giới hạn trong subscription và tự động bù trừ cho các lần gia hạn trong tương lai:

full_immediately

Thu toàn bộ số tiền của plan mới ngay lập tức, bỏ qua thời gian còn lại. Phù hợp nhất để đặt lại chu kỳ billing.

do_not_bill

Chuyển sang plan mới mà không điều chỉnh billing. Không có phí proration và không có credit — khách hàng chỉ cần chuyển sang plan mới. Phù hợp nhất cho việc chuyển đổi hỗ trợ đặc biệt, chuyển đổi plan miễn phí hoặc các trường hợp bạn muốn tự chịu phần chênh lệch chi phí.
Tình huống: Khách hàng đang dùng Basic (30/thaˊng)na^ngca^ˊple^nPro(30/tháng) nâng cấp lên Pro (80/tháng) vào ngày thứ 16 của chu kỳ 30 ngày bằng prorated_immediately.
Lần gia hạn tiếp theo vào 15 tháng 2 (16 tháng 1 + 30 ngày): $80.00/tháng.
Để xem thêm các ví dụ tính toán chi tiết và trường hợp đặc biệt, hãy xem Upgrade & Downgrade Guide đầy đủ của chúng tôi.
Tình huống: Khách hàng đang dùng Pro (80/thaˊng)hạca^ˊpxuo^ˊngStarter(80/tháng) hạ cấp xuống Starter (20/tháng) bằng difference_immediately.
Credit $60 tự động được áp dụng cho các lần gia hạn trong tương lai:
  • Lần gia hạn 1: 20−20 − 20 (credit) = **0.00∗∗(coˋnlại0.00** (còn lại 40 credit)
  • Lần gia hạn 2: 20−20 − 20 (credit) = **0.00∗∗(coˋnlại0.00** (còn lại 20 credit)
  • Lần gia hạn 3: 20−20 − 20 (credit) = $0.00 (credit đã hết)
  • Lần gia hạn 4: $20.00 (giá đầy đủ)
Tìm hiểu thêm về cách quản lý credit trong Upgrade & Downgrade Guide.

Thay đổi Plan với Add-on

Điều chỉnh add-on khi thay đổi plan. Add-on được đưa vào các phép tính proration:
Theo mặc định (effective_at: 'immediately'), các thay đổi gói sẽ kích hoạt khoản phí ngay lập tức. Truyền effective_at: 'next_billing_date' để lên lịch thay đổi vào ngày thanh toán tiếp theo — thay đổi đang chờ sẽ được trả về trên subscription dưới dạng scheduled_change, và bạn có thể hủy thay đổi đó bằng Hủy thay đổi gói đã lên lịch. Các khoản phí thất bại có thể chuyển subscription sang trạng thái on_hold, trừ khi bạn truyền on_payment_failure: 'prevent_change', tùy chọn này giữ subscription ở gói hiện tại cho đến khi thanh toán thành công. Theo dõi các thay đổi thông qua các webhook event subscription.plan_changed.

Xem trước thay đổi Plan

Trước khi xác nhận thay đổi plan, hãy xem trước khoản phí chính xác và subscription sau thay đổi:

Preview Change Plan API

Xem trước các thay đổi plan trước khi xác nhận.

Tạm dừng và tiếp tục Subscription

Tạm dừng sẽ đóng băng subscription thay vì kết thúc subscription. Việc lập hóa đơn dừng lại, quyền truy cập bị thu hồi, còn subscription vẫn giữ nguyên plan và lịch sử để customer có thể tiếp tục chính xác từ nơi họ đã dừng. Hãy sử dụng tính năng này như một lựa chọn giữ chân customer thay cho việc hủy. Mở bất kỳ subscription đang active nào trong Sales → Subscriptions rồi nhấp Pause subscription. Trạng thái sẽ chuyển thành paused và các lần gia hạn sẽ dừng cho đến khi subscription được tiếp tục.
Subscription details page in the dashboard showing the Update, Pause subscription, and Cancel Subscription buttons

Điều gì xảy ra khi bạn tạm dừng

  • Các lần gia hạn dừng lại. Không có invoice nào được tạo và không có khoản phí gia hạn nào được thực hiện trong khi subscription bị tạm dừng.
  • Quyền truy cập bị thu hồi ngay lập tức. Việc tạm dừng sẽ thu hồi mọi entitlement grant đã cấp và đang chờ cấp trên subscription, vô hiệu hóa license keys và ngừng cấp URL tải xuống digital product mới. Khi tiếp tục, các quyền này sẽ được cấp lại, giống như khi khôi phục từ on_hold.
  • Đồng hồ billing đóng băng. next_billing_date và expires_at đều tiến về sau chính xác bằng thời lượng tạm dừng, để customer giữ được khoảng thời gian họ đã thanh toán.
  • Không có giới hạn về thời lượng tạm dừng. Subscription bị tạm dừng sẽ tiếp tục ở trạng thái đó cho đến khi có người tiếp tục. Bạn không cần đặt trước thời lượng tạm dừng.
Tạm dừng sẽ thu hồi quyền truy cập ngay lập tức, không phải khi kết thúc billing period. Nếu subscription kiểm soát quyền truy cập vào product của bạn, hãy thông báo rõ điều này cho customer trước khi họ xác nhận.
Việc tiếp tục sẽ đưa subscription về active và khôi phục các entitlement. Vì đồng hồ đã bị đóng băng, lần gia hạn tiếp theo sẽ diễn ra muộn hơn lịch ban đầu một khoảng bằng thời lượng tạm dừng — subscription bị tạm dừng 12 ngày sẽ gia hạn muộn 12 ngày.

Tạm dừng Subscription tính phí theo usage

Một subscription tính phí theo usage có thể có usage đã được ghi nhận nhưng chưa được lập hóa đơn tại thời điểm bị tạm dừng. Tùy chọn Bill Usage at Pause trong Settings → Subscriptions quyết định cách xử lý usage đó: Chỉ usage được đo lường mới được quyết toán theo cách này — recurring base fee không bao giờ bị tính tại thời điểm tạm dừng. Subscription Standard và on-demand không có khoản nào cần quyết toán, nên setting này không ảnh hưởng đến chúng.
Bill Usage at Pause được ghi nhận theo từng billing cycle. Việc thay đổi tùy chọn giữa cycle không thay đổi cách cycle đang diễn ra được quyết toán; giá trị mới sẽ áp dụng từ cycle tiếp theo.
Settlement invoice được thu như mọi invoice khác, vì vậy việc thu tiền có thể thất bại. Nếu invoice vẫn chưa được thanh toán sau grace period của dunning, subscription sẽ chuyển sang on_hold nhưng vẫn được đánh dấu là đã tạm dừng.
Subscription ở trạng thái này có hai cách thoát và chúng khác nhau ở bên chịu khoản usage chưa thanh toán:
Tiếp tục subscription là một cách hợp lệ để thoát khỏi trạng thái hold này — bạn không cần thu settlement invoice trước. Tuy nhiên, cần lưu ý rằng việc tiếp tục sẽ miễn khoản usage còn nợ thay vì chuyển khoản đó sang kỳ sau.

Cho phép Customer tự tạm dừng Subscription

Allow Subscription Pause trong Settings → Subscriptions kiểm soát việc customer có thể tạm dừng và tiếp tục từ Customer Portal hay không. Tùy chọn này tắt theo mặc định, vì vậy tính năng tự tạm dừng cần được chủ động bật.
Subscriptions settings tab showing the Allow Subscription Pause and Bill Usage at Pause toggles
Setting này chỉ áp dụng cho Customer Portal. Bạn luôn có thể tạm dừng và tiếp tục từ dashboard hoặc API, bất kể trạng thái của toggle. Việc tắt tùy chọn này sẽ ngăn các yêu cầu tạm dừng mới từ customer, nhưng không giữ customer hiện đang tạm dừng ở trạng thái đó — họ vẫn có thể tiếp tục subscription mà họ đã tự tạm dừng. Các lần tạm dừng do bạn thực hiện vẫn thuộc quyền kiểm soát của bạn.

Pausing from the Customer Portal

Xem những gì customer nhìn thấy, bao gồm cả hộp thoại xác nhận.

Tạm dừng qua API

Tạm dừng và tiếp tục được thực hiện thông qua trường status trên endpoint cập nhật subscription. Không có endpoint tạm dừng riêng.
Gửi riêng paused hoặc active — việc kết hợp một trong hai với bất kỳ trường nào khác sẽ bị từ chối với 422. Trường boolean cũ pause đã bị xóa và hiện luôn trả về lỗi 422, vì vậy caller vẫn sử dụng trường này sẽ nhận được lỗi rõ ràng thay vì không có hành động nào diễn ra mà không được thông báo.
Tạm dừng phát ra subscription.paused và tiếp tục phát ra subscription.unpaused. Cả hai đều chứa subscription object đầy đủ, với paused_at được đặt trong thời gian tạm dừng và null sau khi tiếp tục.

Tạm dừng và các thao tác Subscription khác

  • Việc hủy vẫn hoạt động. Bạn có thể hủy subscription bị tạm dừng giống hệt subscription đang active. Mọi settlement invoice đang mở từ lần tạm dừng sẽ bị void khi bạn thực hiện việc này.
  • Các thay đổi plan đã lên lịch bị trì hoãn, không bị loại bỏ. Plan change được lên lịch vào ngày billing tiếp theo sẽ giữ nguyên trong khi subscription bị tạm dừng, sau đó được áp dụng vào ngày billing đã dịch chuyển khi subscription tiếp tục. scheduled_change.effective_at của thay đổi là snapshot tại thời điểm lên lịch và không được điều chỉnh theo thời gian tạm dừng, nên có thể hiển thị một ngày trong quá khứ — hãy hiểu đó là “đã được lên lịch vào”, không phải ngày được đảm bảo. Để loại bỏ thay đổi thay vì tiếp tục áp dụng, hãy sử dụng Cancel Scheduled Plan Change.

Các trạng thái Subscription

Một subscription sẽ đi qua một tập hợp status được xác định trong suốt vòng đời. Bảng này là tài liệu tham chiếu cho mọi status, nguyên nhân tạo ra status đó và cách (hoặc liệu có thể) khôi phục hay không.
on_hold và failed thường bị nhầm lẫn. on_hold là trạng thái có thể khôi phục của một subscription đã active nhưng gia hạn thất bại. failed là trạng thái kết thúc chỉ xảy ra khi việc tạo subscription ban đầu thất bại — không thể kích hoạt lại trạng thái này.
on_hold và paused cũng khác nhau. on_hold là trạng thái ngoài ý muốn — một payment đã thất bại. paused là trạng thái chủ động — bạn hoặc customer đã chọn đóng băng subscription và không có lần gia hạn nào được thực hiện trong thời gian subscription bị tạm dừng. Subscription tính phí theo usage vẫn có thể còn một settlement invoice cần thanh toán tại thời điểm bị tạm dừng; xem Tạm dừng Subscription tính phí theo usage.

State Machine

Trạng thái On Hold

Subscription chuyển sang trạng thái on_hold khi:
  • Payment gia hạn thất bại (không đủ tiền, thẻ hết hạn, v.v.)
  • Phí thay đổi plan thất bại
  • Việc ủy quyền payment method thất bại
  • Pause settlement invoice của subscription tính phí theo usage không được thanh toán
Khi subscription ở trạng thái on_hold, subscription sẽ không tự động gia hạn. Bạn phải cập nhật payment method để kích hoạt lại subscription.

Kích hoạt lại từ trạng thái On Hold

Để kích hoạt lại subscription từ trạng thái on_hold, hãy cập nhật payment method. Thao tác này sẽ tự động:
  1. Tạo khoản charge cho các khoản còn nợ
  2. Tạo invoice
  3. Xử lý payment bằng payment method mới
  4. Đưa subscription về trạng thái active sau khi payment thành công
Ngoại lệ duy nhất là trạng thái hold do pause settlement invoice chưa thanh toán. Việc thanh toán invoice đó sẽ đưa subscription về paused, không phải active, vì subscription đang ở trạng thái tạm dừng trước khi payment thất bại. Hãy tiếp tục subscription một cách rõ ràng sau khi invoice được quyết toán.
Sau khi cập nhật payment method thành công cho subscription on_hold, bạn sẽ nhận được các webhook event payment.succeeded rồi đến subscription.active.

Webhook Event theo Transition

Mỗi transition sẽ phát ra một webhook để bạn có thể triển khai logic entitlement mà không cần polling:

Subscription Webhook Payloads

Xem schema payload đầy đủ cho các event trong vòng đời subscription.

Quản lý API

Sử dụng POST /checkouts để tạo subscription theo cách lập trình từ các product, cùng với trial tùy chọn (subscription_data.trial_period_days) và add-on (product_cart[].addons).
POST /subscriptions đã deprecated. Các integration hiện có vẫn tiếp tục hoạt động, nhưng integration mới nên sử dụng Checkout Sessions.

API Reference

Xem API tạo checkout session.
Sử dụng PATCH /subscriptions/{subscription_id} để hủy vào ngày billing tiếp theo, gia hạn subscription, cập nhật thông tin billing hoặc chỉnh sửa metadata. Để thay đổi quantity, hãy sử dụng Change Plan API — PATCH không chấp nhận quantity.

API Reference

Tìm hiểu cách cập nhật thông tin subscription.
Tạm dừng và tiếp tục được thực hiện thông qua cùng endpoint PATCH /subscriptions/{subscription_id}, sử dụng trường status: status: paused sẽ tạm dừng một subscription đang hoạt động và status: active sẽ tiếp tục subscription đó. Không giá trị nào trong hai giá trị này có thể được kết hợp với bất kỳ trường nào khác trong cùng request. Để biết đầy đủ về hành vi, ảnh hưởng đến hoạt động lập hóa đơn và các cài đặt business liên quan, hãy xem Pausing and Resuming Subscriptions.

API Reference

Xem API cập nhật subscription, bao gồm trường status.
Thay đổi product đang active và quantity với các tùy chọn proration.

API Reference

Xem lại các tùy chọn thay đổi plan.
Đối với subscription on-demand, hãy tính các amount cụ thể theo nhu cầu.

API Reference

Tính phí subscription on-demand.
Sử dụng GET /subscriptions để liệt kê tất cả subscription và GET /subscriptions/{id} để truy xuất một subscription.

API Reference

Xem các API listing và retrieval.
Lấy usage đã ghi nhận cho các mô hình pricing metered hoặc hybrid.

API Reference

Xem usage history API.
Cập nhật payment method cho subscription. Đối với subscription đang active, thao tác này cập nhật payment method cho các lần gia hạn trong tương lai. Đối với subscription ở trạng thái on_hold, thao tác này kích hoạt lại subscription bằng cách tạo charge cho các khoản còn nợ.Khi tạo payment-method link mới (request type New), bạn có thể truyền allowed_payment_method_types để giới hạn các payment method mà customer nhìn thấy trên trang đó. Customer sẽ không bao giờ thấy method không có trong danh sách, dù việc đưa một method vào danh sách không đảm bảo method đó sẽ xuất hiện (khả dụng vẫn phụ thuộc vào các yếu tố như vị trí của customer và business settings của bạn).

API Reference

Tìm hiểu cách cập nhật payment method và kích hoạt lại subscription.

Các trường hợp sử dụng phổ biến

  • SaaS và API: Quyền truy cập theo tier với add-on cho seat hoặc usage
  • Content và media: Quyền truy cập hàng tháng với trial giới thiệu
  • Plan hỗ trợ B2B: Hợp đồng hàng năm với add-on hỗ trợ cao cấp
  • Tools và plugin: License key và các bản phát hành theo version

Ví dụ Integration

Checkout Sessions (subscription)

Khi tạo checkout session, hãy thêm subscription product và các add-on tùy chọn:

Thay đổi plan với proration

Nâng cấp hoặc hạ cấp subscription và kiểm soát behavior của proration:

Hủy vào ngày billing tiếp theo

Lên lịch hủy có hiệu lực vào cuối billing period hiện tại:

Gia hạn thời hạn Subscription

Kéo dài thời gian subscription hoạt động bằng cách truyền subscription_period_count và subscription_period_interval mới vào PATCH /subscriptions/{subscription_id}. Thời điểm hết hạn của subscription được tính lại từ count và interval mới — ví dụ, để cấp thêm thời gian cho customer trong plan hiện tại:
Thời hạn của subscription chỉ có thể được tăng, không thể rút ngắn.

Subscription on-demand

Tạo subscription on-demand và tính phí sau khi cần:

Cập nhật payment method cho Subscription đang active

Cập nhật payment method cho subscription đang active:

Kích hoạt lại Subscription từ on_hold

Kích hoạt lại subscription bị chuyển sang on hold do payment thất bại:

Subscription với Mandate tuân thủ RBI

Subscription UPI và Indian card hoạt động theo quy định RBI (Reserve Bank of India), với các yêu cầu mandate cụ thể:

Giới hạn Mandate

Loại và amount của mandate phụ thuộc vào recurring charge của subscription:
  • Charge thấp hơn mandate floor (mặc định ₹15,000): Chúng tôi tạo on-demand mandate với amount bằng floor. Amount subscription được tính định kỳ theo tần suất subscription, tối đa bằng mandate limit.
  • Charge bằng hoặc cao hơn mandate floor: Chúng tôi tạo subscription mandate (hoặc on-demand mandate) với amount subscription chính xác.
Mandate floor có thể được cấu hình theo merchant hoặc theo request thông qua mandate_min_amount_inr_paise (INR paise). Amount được đăng ký với ngân hàng là max(mandate_floor, billing_amount) — vì vậy floor trở thành authorization ceiling mà customer nhìn thấy mỗi khi billing thấp hơn. Để biết thông tin chi tiết về mandate tuân thủ RBI và mandate floor có thể cấu hình cho các payment method của Ấn Độ, hãy xem trang India Payment Methods.

Lưu ý khi Nâng cấp và Hạ cấp

Quan trọng: Khi nâng cấp hoặc hạ cấp subscription, hãy cân nhắc cẩn thận các mandate limit:
  • Nếu việc nâng cấp/hạ cấp tạo ra amount charge vượt quá Rs 15,000 và vượt existing on-demand payment limit, transaction charge có thể thất bại.
  • Trong trường hợp này, customer có thể cần cập nhật payment method hoặc thay đổi subscription lần nữa để thiết lập mandate mới với limit phù hợp.

Authorization cho Charge có Giá trị Cao

Với charge subscription từ Rs 15,000 trở lên:
  • Ngân hàng sẽ yêu cầu customer authorize transaction.
  • Nếu customer không authorize transaction, transaction sẽ thất bại và subscription sẽ được chuyển sang on hold.

Độ trễ Xử lý 48 giờ

Processing Timeline: Recurring charge trên Indian card và subscription UPI tuân theo quy trình xử lý đặc biệt:
  • Charge được initiated vào ngày đã lên lịch theo tần suất subscription.
  • Khoản deduction thực tế từ tài khoản của customer chỉ diễn ra sau 48 giờ kể từ khi payment được initiated.
  • Khoảng thời gian 48 giờ này có thể kéo dài thêm 2-3 giờ tùy thuộc vào phản hồi từ bank API.

Khoảng thời gian Hủy Mandate

Trong processing window 48 giờ:
  • Customer có thể hủy mandate qua banking app của họ.
  • Nếu customer hủy mandate trong khoảng thời gian này, subscription vẫn active (đây là edge case chỉ áp dụng cho Indian card và subscription UPI AutoPay).
  • Tuy nhiên, deduction thực tế có thể thất bại và trong trường hợp đó, chúng tôi sẽ chuyển subscription sang on hold.
Edge Case Handling: Nếu bạn cung cấp benefits, credits hoặc subscription usage cho customer ngay khi charge được initiated, bạn cần xử lý phù hợp processing window 48 giờ này trong application. Hãy cân nhắc:
  • Trì hoãn việc kích hoạt benefit cho đến khi payment được xác nhận
  • Triển khai grace period hoặc quyền truy cập tạm thời
  • Theo dõi subscription status để phát hiện việc hủy mandate
  • Xử lý trạng thái subscription hold trong application logic
Theo dõi subscription webhook để nắm bắt các thay đổi về payment status và xử lý các edge case khi mandate bị hủy trong processing window 48 giờ.

Best Practices

  • Bắt đầu với các tier rõ ràng: 2–3 plan có khác biệt dễ nhận biết
  • Truyền đạt pricing rõ ràng: Hiển thị tổng tiền, proration và lần gia hạn tiếp theo
  • Sử dụng trial có cân nhắc: Chuyển đổi bằng onboarding, không chỉ bằng thời gian
  • Tận dụng add-on: Giữ base plan đơn giản và upsell các tiện ích bổ sung
  • Kiểm thử các thay đổi: Xác thực plan change và proration trong test mode
Subscription là nền tảng linh hoạt cho doanh thu định kỳ. Hãy bắt đầu đơn giản, kiểm thử kỹ lưỡng và cải tiến dựa trên các chỉ số adoption, churn và expansion.

Plan changes with proration

Upgrade or downgrade a subscription and control proration behavior:

Cancel at next billing date

Schedule a cancellation that takes effect at the end of the current billing period:

Extend the subscription period

Extend how long a subscription runs by passing a new subscription_period_count and subscription_period_interval to PATCH /subscriptions/{subscription_id}. The subscription’s expiry is recomputed from the new count and interval — for example, to grant a customer extra time on their current plan:
A subscription’s period can only be increased, never shortened.

On‑demand subscriptions

Create an on‑demand subscription and charge later as needed:

Update payment method for active subscription

Update the payment method for an active subscription:

Reactivate subscription from on_hold

Reactivate a subscription that went on hold due to failed payment:

Subscriptions with RBI-Compliant Mandates

UPI and Indian card subscriptions operate under RBI (Reserve Bank of India) regulations with specific mandate requirements:

Mandate Limits

The mandate type and amount depend on your subscription’s recurring charge:
  • Charges below the mandate floor (default ₹15,000): We create an on-demand mandate for the floor amount. The subscription amount is charged periodically according to your subscription frequency, up to the mandate limit.
  • Charges at or above the mandate floor: We create a subscription mandate (or on-demand mandate) for the exact subscription amount.
The mandate floor is configurable per merchant or per request via mandate_min_amount_inr_paise (INR paise). The amount registered with the bank is max(mandate_floor, billing_amount) — so the floor effectively becomes the customer-facing authorization ceiling whenever billing is lower. For detailed information about RBI-compliant mandates and the configurable mandate floor for Indian payment methods, see the India Payment Methods page.

Upgrade and Downgrade Considerations

Important: When upgrading or downgrading subscriptions, carefully consider the mandate limits:
  • If an upgrade/downgrade results in a charge amount that exceeds Rs 15,000 and goes beyond the existing on-demand payment limit, the transaction charge may fail.
  • In such cases, the customer may need to update their payment method or change the subscription again to establish a new mandate with the correct limit.

Authorization for High-Value Charges

For subscription charges of Rs 15,000 or more:
  • The customer will be prompted by their bank to authorize the transaction.
  • If the customer fails to authorize the transaction, the transaction will fail and the subscription will be put on hold.

48-Hour Processing Delay

  • Nếu việc nâng cấp/hạ cấp dẫn đến số tiền tính phí vượt quá hạn mức tối thiểu của mandate (mặc định là ₹15.000) và vượt quá giới hạn thanh toán on-demand hiện tại, giao dịch có thể bị lỗi.
  • Khách hàng có thể cần cập nhật phương thức thanh toán hoặc thay đổi gói đăng ký một lần nữa để thiết lập mandate mới với giới hạn chính xác.
    • Charges are initiated on the scheduled date according to your subscription frequency.
    • The actual deduction from the customer’s account occurs only after 48 hours from payment initiation.
    • This 48-hour window may extend up to 2-3 additional hours depending on bank API responses.

    Mandate Cancellation Window

    During the 48-hour processing window:
    • Customers can cancel the mandate via their banking apps.
    • If a customer cancels the mandate during this period, the subscription will remain active (this is an edge case specific to Indian card and UPI AutoPay subscriptions).
    • However, the actual deduction may fail, and in that case, we will put the subscription on hold.
    Edge Case Handling: If you provide benefits, credits, or subscription usage to customers immediately upon charge initiation, you need to handle this 48-hour window appropriately in your application. Consider:
    • Delaying benefit activation until payment confirmation
    • Implementing grace periods or temporary access
    • Monitoring subscription status for mandate cancellations
    • Handling subscription hold states in your application logic
    Monitor subscription webhooks to track payment status changes and handle edge cases where mandates are cancelled during the 48-hour window.

Best Practices

  • Start with clear tiers: 2–3 plans with obvious differences
  • Communicate pricing: Show totals, proration, and next renewal
  • Use trials thoughtfully: Convert with onboarding, not just time
  • Leverage add‑ons: Keep base plans simple and upsell extras
  • Test changes: Validate plan changes and proration in test mode
Subscriptions are a flexible foundation for recurring revenue. Start simple, test thoroughly, and iterate based on adoption, churn, and expansion metrics.
  • Delay benefit activation until payment confirmation
  • Implement grace periods or temporary access
  • Monitor subscription status for mandate cancellations
  • Handle subscription hold states in your application logic
Monitor subscription webhooks to track payment status changes and handle edge cases where mandates are cancelled during the 48-hour window.

Best Practices

  • Start with clear tiers: 2-3 plans with obvious differences
  • Communicate pricing: Show totals, proration, and next renewal date
  • Use trials thoughtfully: Convert with onboarding, not just time
  • Leverage add-ons: Keep base plans simple and upsell extras
  • Test changes: Validate plan changes and proration in test mode
Subscriptions are a flexible foundation for recurring revenue. Start simple, test thoroughly, and iterate based on adoption, churn, and expansion metrics.
Lần sửa đổi cuối 26 tháng 9, 2026