新機能
1. 製品レベルのアナリティクス
すべての製品には専用の分析ダッシュボードが用意されました。Products > [Select a Product] からその製品固有の詳細指標にアクセスでき、5つのタブに整理されています:
| タブ | 内容 |
|---|
| Overview | 総収益、成功した支払い件数、30日間の収益トレンドチャート(毎日または累積)、および絞り込み可能な取引テーブル |
| Customers | 支出順に並んだ上位3名の顧客をポディウムビューで表示し、さらに顧客別の詳細テーブル |
| Retention | 顧客退会率、収益退会率、パターン把握に役立つ二重線のトレンドチャート |
| Subscribers | ステータス、開始日、次回請求日、金額を含む製品のすべてのサブスクリプション |
| MRR | 新MRR、拡張MRR、解約MRR、純新規MRRの内訳を積み上げ棒グラフで示す月間定期収益 |
すべてのタブには日付フィルター(デフォルトは全期間)があり、任意の期間を詳細に分析できます。
Retentionタブを使えば離脱率の高い製品を早期に特定でき、MRRタブでは拡張収益が月ごとの離脱収益を上回っているかを追跡できます。
詳細: Product-Level Analytics
2. Dodo PaymentsでのVerifi RDRサポート
Dodo Paymentsは現在、Verifiが提供する**Visa Rapid Dispute Resolution (RDR)**をサポートしています。これは対象となるVisaの異議申し立てを正式なチャージバックになる前に解決する自動化ツールです。カード保有者が異議を申し立てると、RDRがそれをインターセプトして、取引額が設定したUSD閾値以下の場合は自動的に払い戻しを行います。
重要なポイント
| 利点 | 影響 |
|---|
| 異議申し立て率の低下 | RDRで解決した異議申し立てはVisaの0.9%の閾値にはカウントされません |
| 異議申し立て手数料が不要 | 1件あたり15~25ドルの返金不可の手数料を回避できます |
| 運用負荷ゼロ | 証拠収集や回答期限の対応が不要です |
| 顧客体験の向上 | カード保有者に即時払い戻しが提供されます |
| アカウント保護 | VisaのDispute Monitoring Program(VDMP)に入らずに済みます |
Visaの0.9%の異議申し立て率や月間100件を超えるとVDMPに入り、最大で月額5万ドル以上の罰金が課される可能性があります。RDRを使えばこれらの閾値を大幅に下回ることができます。
仕組み
- カード保有者が銀行に異議申し立てを行います
- RDRが正式なチャージバックになる前にその異議をインターセプトします
- 取引額が閾値以下であれば、自動的に払い戻しが発行されます
- 異議は即座に解決され、異議率にカウントされません
RDRを通じて自動的に払い戻された取引は、Dodo Paymentsダッシュボードでは失敗した異議として表示されます。これは正式なチャージバックを防ぐために自動的に払い戻しが行われた結果であり、意図された挙動です。
Verifi RDRをアカウントで有効にするには、support@dodopayments.comに連絡して閾値を設定してください。
詳細: Visa RDR Documentation
3. DodoPayments CLI
新しく登場したDodoPayments CLI (dodopayments-cli) により、ターミナルから直接Dodo Paymentsのワークフロー全体を管理できます。コマンドラインを好む開発者向けに構築されており、製品、支払い、顧客、割引、ライセンス、アドオン、返金を管理したり、エディタを離れずにチェックアウトセッションを作成したりできます。
インストール
npm install -g dodopayments-cli
主要コマンド
| コマンド | 説明 |
|---|
dodo login | APIキーで認証します(ブラウザを開きます) |
dodo products list | すべての製品を一覧表示 |
dodo payments list | すべての支払いを一覧表示 |
dodo customers create | 新しい顧客を作成 |
dodo checkout new | チェックアウトセッションを作成してURLを取得 |
dodo wh listen | WebSocketを介してライブテストWebhookをローカルサーバーに転送 |
dodo wh trigger | 任意のエンドポイントにモックWebhookペイロードを送信 |
Webhookテスト
CLIには開発向けの強力なツールが2つ含まれています:
dodo wh listen — WebSocket接続を開いて、実際のテストWebhookをローカルサーバーにリアルタイムで転送し、シグネチャ検証用の元のヘッダーを保持します
dodo wh trigger — モックWebhookペイロードを対話的に送信し、サブスクリプション、支払い、返金、異議、ライセンスの22種類すべてのイベントタイプをサポートします
WebhookリスナーはテストモードのAPIキーでのみ動作します。dodo wh listenを使用する前に、テストモードのキーでログインしていることを確認してください。
詳細: CLI Documentation
4. カスタマーポータルUIの刷新
カスタマーポータルは完全に再設計され、クリーンで統一されたインターフェースになりました。左側のサイドバーによるナビゲーションと整理されたセクションにより、顧客がより直感的にセルフサービスを利用できるようになっています。
新機能
| セクション | 機能 |
|---|
| Active Subscriptions | プランの詳細、請求サイクル、次回支払い日を含むすべてのアクティブなサブスクリプションを表示 |
| Payment Methods | 保存された支払い方法の管理、新しいカードの追加、支払い詳細の更新 |
| Billing History | 過去の請求書をPDFレシート付きで表示 |
| Billing Information | 名前、メール、電話番号、請求先住所の編集 |
| Subscription Details | サブスクリプションの詳細情報を確認し、キャンセルやプラン変更のオプションを選択 |
| Plan Changes | ポータル内でProduct Collections経由によるアップグレードやダウングレード |
顧客は刷新されたポータルからアクティブなサブスクリプションの支払い方法を更新したり、支払い失敗で保留中になっているサブスクリプションを再度有効化することもできます。
ライブモードではhttps://customer.dodopayments.com/login/{business_id}、テストモードではhttps://test.customer.dodopayments.com/login/{business_id}で刷新されたポータルを利用できます。
詳細: Customer Portal
5. インラインチェックアウトでの支払い方法更新
inline checkout は、サブスクリプションの支払い方法更新に対応しました。アクティブなサブスクリプションの支払い方法を更新したり、保留状態のサブスクリプションを再開する必要がある場合、支払い方法更新フローをあなたのページレイアウト内に直接埋め込んだインラインチェックアウトとしてレンダリングできます。これによりシームレスで統合された体験が提供されます。
仕組み
- Update Payment Method APIを呼び出して
payment_linkを取得します:
const response = await client.subscriptions.updatePaymentMethod('sub_123', {
type: 'new',
return_url: 'https://example.com/return'
});
- 返却された
payment_linkをインラインチェックアウトのcheckoutUrlとして使用します:
DodoPayments.Checkout.open({
checkoutUrl: response.payment_link,
elementId: "dodo-inline-checkout"
});
インラインフレームには支払い方法の入力フォームのみがレンダリングされるため、顧客はページを離れずに新しいカード情報を入力したり、保存済みの支払い方法を選択できます。
保留中のサブスクリプションでは、支払い方法更新フローが自動的に未払い分の請求を作成します。再開を確認するにはpayment.succeededおよびsubscription.activeのWebhookを監視してください。
詳細: Inline Checkout | Subscription Payment Method Updates
6. チェックアウトセッションでの税ID事前入力サポート
チェックアウトセッション作成時にtax_idパラメータを使用して税ID(例: VAT番号、GST番号)を事前入力できるようになりました。これは顧客の税識別番号が既に分かっているB2B取引に最適です。税IDを事前入力すると、チェックアウトフォーム上でそのフィールドが予め入力された状態でロックされます。
const session = await client.checkoutSessions.create({
product_cart: [{ product_id: 'prod_123', quantity: 1 }],
customer: { customer_id: 'cus_123' },
billing_address: { country: 'DE' },
tax_id: 'DE999999999',
return_url: 'https://yoursite.com/return'
});
tax_idパラメータは、少なくともcountryフィールドを含むbilling_addressが必要です。税の適格性はリアルタイムで検証され、対象となるB2B取引にはリバースチャージのルールが自動的に適用されます。
allow_customer_editing_tax_idフィーチャーフラグで税IDの変更可否を制御し、allow_tax_idでチェックアウト上の税IDの表示・非表示を切り替えられます。
詳細: Checkout Sessions - Tax ID | B2B Payments
7. リターンURLリダイレクトでのライセンスキーとメール
顧客がチェックアウトを完了すると、Dodo Paymentsは既存のpayment_id/subscription_idおよびstatusパラメータに加え、license_keyとemailをあなたのreturn_urlリダイレクトにクエリパラメータとして追加します。
追加されるクエリパラメータ
| パラメータ | 型 | 条件 |
|---|
payment_id | string | 都度支払いのときは常に含まれます |
subscription_id | string | サブスクリプション支払いのときは常に含まれます |
status | string | 常に含まれます |
license_key | string | 製品でライセンスキーが有効な場合に含まれます(複数あるときはカンマ区切り) |
email | string | 顧客にメールアドレスが登録されている場合に含まれます |
リダイレクトURLの例:
# One-time payment with license key
https://yoursite.com/return?payment_id=pay_xxx&status=succeeded&license_key=LK-001&email=customer%40example.com
# Subscription with multiple license keys
https://yoursite.com/return?subscription_id=sub_xxx&status=active&license_key=LK-001,LK-002&email=customer%40example.com
これらのクエリパラメータを使えば、返却ページですぐにライセンスキーを表示したり、追加のAPI呼び出しなしで確認メールを送信したりできます。
詳細: Checkout Sessions - Return URL | License Keys in Return URL
8. 顧客メール更新API
PATCH /customers/{customer_id}エンドポイントは、顧客のメールアドレスをプログラムから更新できるようになりました。名前、電話番号、メタデータとともに1回のAPIコールでメールアドレスを更新できます。
await client.customers.update('cus_123', {
email: 'newemail@example.com',
name: 'Updated Name'
});
更新可能なフィールド
| フィールド | 型 | 説明 |
|---|
email | string | null | 顧客のメールアドレス |
name | string | null | 顧客の表示名 |
phone_number | string | null | 国際形式の電話番号 |
metadata | object | null | カスタムのキーと値 |
顧客のメール更新は、カスタマーポータル(セルフサービス)、ダッシュボード、CLIのdodo customers update経由でも利用できます。
詳細: Customer Update API | Customer Management
9. Bunアダプターリリース
@dodopayments/bunの登場により、Bunのネイティブサーバー (Bun.serve()) 向けの専用フレームワークアダプターが提供されました。チェックアウト、カスタマーポータル、Webhookを数行のコードでBunに統合できます。
インストール
bun add @dodopayments/bun
簡単なセットアップ
import { Checkout, CustomerPortal, Webhooks } from "@dodopayments/bun";
Bun.serve({
routes: {
"/api/checkout": Checkout({
bearerToken: process.env.DODO_PAYMENTS_API_KEY!,
returnUrl: process.env.DODO_PAYMENTS_RETURN_URL!,
environment: process.env.DODO_PAYMENTS_ENVIRONMENT!,
}),
"/api/customer-portal": CustomerPortal({
bearerToken: process.env.DODO_PAYMENTS_API_KEY!,
environment: process.env.DODO_PAYMENTS_ENVIRONMENT!,
}),
"/api/webhooks": Webhooks({
webhookKey: process.env.DODO_PAYMENTS_WEBHOOK_KEY!,
onPaymentSucceeded: async (payload) => {
console.log("Payment succeeded:", payload.data.payment_id);
},
onSubscriptionActive: async (payload) => {
console.log("Subscription active:", payload.data.subscription_id);
},
}),
},
});
Bunアダプターは静的、動的、セッションベースの3つのチェックアウトフロー、カスタマーポータルセッションの生成、およびシグネチャ検証とZodバリデーションを備えた安全なWebhook処理を22種類のイベントタイプでサポートします。
Bunアダプターは、Next.js、Nuxt、Express、Fastify、Hono、Astro、SvelteKit、Remix、TanStack Start、Better Auth、Convexを含む11種類のフレームワークアダプターの仲間入りを果たします。
詳細: Bun Adapter Documentation | Framework Adapters Overview