Skip to main content

前提条件

Dodo Payments APIを統合するには、次のものが必要です:
  • Dodo Paymentsのマーチャントアカウント
  • ダッシュボードからのAPI認証情報(APIキーとWebhookシークレットキー)
前提条件に関する詳細なガイドについては、このセクションを確認してください。

API統合

チェックアウトセッション

Checkout Sessionsを使用して、セキュリティで保護されたホスト型チェックアウトでサブスクリプション商品を販売します。サブスクリプション商品を product_cart に渡し、返された checkout_url に顧客をリダイレクトしてください。
Mixed Checkout: サブスクリプション商品を単発商品と同じチェックアウトセッションで組み合わせることができます。これにより、サブスクリプションに設定料金を追加したり、SaaSとハードウェアバンドルをまとめて提供したりするユースケースが可能になります。例については Checkout Sessions guide を参照してください。

APIレスポンス

以下はレスポンスの例です:
顧客を checkout_url にリダイレクトします。

Webhook

サブスクリプションを統合する際、サブスクリプションライフサイクルを追跡するためのWebhookを受信します。これらのWebhookは、サブスクリプションの状態や支払いシナリオを効果的に管理するのに役立ちます。 Webhookエンドポイントを設定するには、詳細な統合ガイドに従ってください。

サブスクリプションイベントタイプ

以下のWebhookイベントは、サブスクリプションの状態変更を追跡します:
  1. subscription.active - サブスクリプションが正常に有効化されました。
  2. subscription.updated - サブスクリプションオブジェクトが更新されました(任意のフィールドが変更されたときに発火します)。
  3. subscription.on_hold - 更新失敗によりサブスクリプションが保留されました。
  4. subscription.failed - マンダート作成中にサブスクリプションの作成が失敗しました。
  5. subscription.renewed - 次回請求期間に向けてサブスクリプションが更新されました。
信頼性の高いサブスクリプションライフサイクル管理のために、これらのサブスクリプションイベントを追跡することをお勧めします。
subscription.updated を使用して、サブスクリプションの変更をリアルタイムで通知し、APIをポーリングせずにアプリケーション状態を同期させます。

支払いシナリオ

受信する webhook とそのタイミングは、商品に trial があるかどうかによって異なります。 即時請求(trial 日数 0 日):
  1. subscription.active: mandate が承認され、subscription が有効化されます。
  2. payment.succeeded: 初回 charge を確認します。checkout から 2〜10 分以内 に発生します。
trial 期間がある場合:
  1. trial 開始時(checkout): 支払い方法が承認されると subscription.active が 1 回発生します。この時点では定期 charge は発生しません。 初回の実際の charge は trial 終了まで延期されます。
  2. trial 終了時: 定期金額が charge され、payment.succeeded と同時に subscription.renewed を受信します。
その後の更新ごと:
  • subscription.renewed: 更新 payment が引き落とされる各 billing cycle で発生し、常に payment.succeeded と同時に送信されます。更新された next_billing_date も含まれます。
subscription product に対して実際に金額が引き落とされるたびに、subscription.renewed payment.succeeded を受信します。次の cycle の access を延長するシグナルとして、payment.succeeded 単独ではなく subscription.renewed を使用してください。
Payment Failure Scenarios
  1. Subscription Failure
  • subscription.failed - mandate の作成に失敗したため、subscription の作成に失敗しました。
  • payment.failed - payment の失敗を示します。
  1. Subscription On Hold
  • subscription.on_hold - renewal payment または plan change charge の失敗により、subscription が on hold になります。
  • subscription が on hold になると、payment method が更新されるまで自動的には更新されません。
Best Practice: 実装を簡素化するため、subscription の lifecycle 管理では主に subscription event を追跡することをおすすめします。
error_code/error_message の読み取り方、retry のタイミング、customer への failure の提示方法について詳しくは、Handle Payment Failures を参照してください。

subscription.failedsubscription.on_hold の違い

これら 2 つの event は混同しやすいものの、必要な対応は大きく異なります。
subscription.failed は終端状態です。subscription を再有効化することはできません。customer は新しい subscription を作成する必要があります。この event が発生した場合は、entitlement を決して付与しないでください。

Subscription On Hold の処理

subscription が on_hold state になると、再有効化するために payment method を更新する必要があります。このセクションでは、subscription が on hold になるタイミングとその処理方法を説明します。

Subscription が On Hold になる場合

subscription は次の場合に on hold になります。
  • Renewal payment の失敗: 残高不足、カードの有効期限切れ、または bank decline により、自動 renewal charge に失敗した場合
  • Plan change charge の失敗: plan の upgrade/downgrade 中に発生する即時 charge に失敗した場合
  • Payment method の承認失敗: recurring charge に対して payment method を承認できない場合
on_hold state の subscription は自動的には更新されません。subscription を再有効化するには payment method を更新する必要があります。

On Hold の Subscription を再有効化する

on_hold state の subscription を再有効化するには、Update Payment Method API を使用します。これにより自動的に次の処理が行われます。
  1. 未払い残額に対する charge を作成
  2. charge の invoice を生成
  3. 新しい payment method を使用して payment を処理
  4. payment が成功すると、subscription を active state に再有効化
1

Handle subscription.on_hold webhook

subscription.on_hold webhook を受信したら、application state を更新し、customer に通知してください。
2

Update payment method

customer が payment method を更新する準備ができたら、Update Payment Method API を呼び出します。
customer が payment method を保存している場合は、既存の payment method ID も使用できます。
3

Monitor webhook events

payment method を更新した後、次の webhook event を監視してください。
  1. payment.succeeded - 未払い残額に対する charge が成功した
  2. subscription.active - subscription が再有効化された

Subscription event payload の例


Subscription Plan の変更

change plan API endpoint を使用して、subscription plan を upgrade または downgrade できます。これにより subscription の product、quantity、および proration を変更できます。

Change Plan API Reference

subscription plan の変更について詳しくは、Change Plan API documentation を参照してください。

Proration Options

subscription plan を変更する際、即時 charge の処理方法として 2 つの option があります。

1. prorated_immediately

  • 現在の billing cycle の残り時間に基づいて prorated amount を計算
  • old plan と new plan の差額のみを customer に charge
  • trial 期間中は user を直ちに new plan に切り替え、customer に即時 charge

2. full_immediately

  • new plan の subscription amount 全額を customer に charge
  • previous plan の残り時間や credit を無視
  • billing cycle を reset したい場合や、proration に関係なく全額を charge したい場合に便利

3. difference_immediately

  • upgrade すると、2 つの plan amount の差額が customer に即時 charge されます。
  • たとえば、current plan が 30 Dollars で customer が 80 Dollars の plan に upgrade すると、$50 が即時に charge されます。
  • downgrade すると、current plan の未使用 amount が internal credit として追加され、今後の subscription renewal に自動的に適用されます。
  • たとえば、current plan が 50 Dollars で customer が 20 Dollars の plan に切り替えると、残りの $30 が credit として付与され、次の billing cycle に使用されます。

4. do_not_bill

  • plan change を即時に適用しますが、変更時には 何も charge しません
  • 更新後の plan(および quantity/add-ons)は次回予定されている renewalで請求され、元の billing date は維持されます
3 つの「今すぐ charge」mode はすべて billing cycle を reset します。 prorated_immediatelydifference_immediatelyfull_immediately は subscription の next_billing_date を変更日に移動します。元の renewal date を維持するのは do_not_bill のみですが、即時 charge は発生しません。

Behavior

  • この API を呼び出すと、Dodo Payments は選択した proration option に基づいて直ちに charge を開始します
  • plan change が downgrade で、prorated_immediately を使用した場合、credit が自動的に計算され、subscription の credit balance に追加されます。これらの credit はその subscription 専用であり、同じ subscription の今後の recurring payment の offset にのみ使用されます
  • full_immediately option は credit の計算を bypass し、新しい plan の金額全額を charge します
proration option は慎重に選択してください: 未使用時間を考慮した公平な billing には prorated_immediately を使用し、current billing cycle に関係なく new plan の金額全額を charge したい場合は full_immediately を使用してください。

Charge Processing

  • plan change 時に開始される即時 charge は、通常 2 分未満で処理が完了します
  • この即時 charge が何らかの理由で失敗すると、問題が解決するまで subscription は自動的に on hold になります

On-Demand Subscriptions

Create Subscription

サブスクリプション製品の作成およびサブスクリプションライフサイクルの管理に関する API リファレンス

Change Subscription Plan

プロレートオプションを使用したサブスクリプションプランのアップグレード、ダウングレード、または変更に関する API リファレンス

Update Payment Method

支払い方法の更新および保留中のサブスクリプションの再有効化に関する API リファレンス

Patch Subscription

サブスクリプション詳細および設定の更新に関する API リファレンス
on-demand subscription を作成するには: on-demand subscription を作成するには、POST /subscriptions API endpoint を使用し、request body に on_demand field を含めます。これにより、即時 charge なしで payment method を承認するか、custom initial price を設定できます。 on-demand subscription に charge するには: 後続の charge には、POST /subscriptions//charge endpoint を使用し、その transaction で customer に charge する amount を指定します。
request/response の例、安全な retry policy、webhook handling を含む完全な step-by-step guide については、On-Demand Subscriptions Guide を参照してください。

Subscription Billing について知っておくべき重要事項

subscription period は payment frequency より長く設定してください。 subscription period が payment frequency と同じ場合(例: period = 1 month、frequency = 1 month)、subscription は単一の cycleのみ有効となり、その後 renewal されず expired に移行します。継続的な monthly plan には、monthly payment frequency と長い subscription period(例: 20 years)を設定してください。
Currency は初回の成功した charge 時に固定されます。 checkout 作成時には、billing_currency billing_address.country を必ず明示的に渡してください。省略すると customer の IP(Adaptive Currency)から検出され、subscription が初回 charge を受けると currency は lifetime にわたって固定されます。customer が後から旅行しても変更できません。
trial では charge ではなく $0 authorization が行われます。 subscription に trial がある場合、trial 開始時にカードを保存するための $0 mandate authorization が作成され、初回の実際の charge は trial 終了時に発生します。payments list では、trial 中の subscription に amount: 0 を含む payment が正確に 1 件表示されます。
Subscription lifecycle: on_hold = renewal が失敗した状態(復旧可能: customer に payment method の更新を促します。dunning retry が適用されます)。expired = renewal されずに term が終了した状態で、再有効化できません。customer は再 subscription する必要があります。cancelled = customer または merchant によって終了された状態です。renewal failure の大半は Dodo の error ではなく、issuer-side decline(残高不足、カード declined)です。
Indian card は RBI e-mandate に基づいて処理されます。 off-session charge(renewal および plan-change charge)の settlement には 最大約 48 時間かかる場合があり、₹15,000を超える recurring auto-debit には customer による再 authentication が必要です(そのため、この上限を超える upgrade では既存の mandate を使用できません)。1 件の charge がまだ processing の間に、同じ subscription で 2 件目の charge を行うと、“Cannot create new charge as previous payment is not successful yet.” という error で失敗します。Non-Indian card はほぼ即時に確認されます。
Subscription charge には $1(または相当する currency)の minimum があります。 $0.01–$0.99 の amount は product_price: value out of range で reject されます。許可されるのは、on-demand mandate_only setup 経由の $0 のみです。

Create Subscription

subscription product の作成と subscription lifecycle の管理に関する API reference

Change Subscription Plan

proration option を使用した subscription plan の upgrade、downgrade、変更に関する API reference

Update Payment Method

payment method の更新と on-hold subscription の再有効化に関する API reference

Patch Subscription

subscription details と configuration の更新に関する API reference
最終更新日 2026年7月31日