目的
- 無料プラン(価格=0)とクーポン割引(価格>0 を割り引き)の設計・運用指針をまとめます。
- 誤用・不正利用を抑えつつ、トライアル/普及/カンペーン用途で柔軟に活用できるようにします。
無料プラン(Free Plan)
基本方針
- プロダクトのプラン定義で価格を
0に設定すると「無料プラン」として扱います。 - 無料プランの発行時は**ユーザー識別(メール)**が必須。
※ダブルオプトイン(確認メール経由)を推奨。
推奨仕様(運用ルール)
- 発行制限
- 同一メールあたり 1ライセンスまで(上限緩和は管理画面で可)。
- 同一ドメインのアクティベーション回数も一般プラン同様にカウント(例:1サイトまで)。
- 本人性の担保
- メール認証(ワンタイムトークン)でアクティベーションを有効化。
- BOT/濫用対策として reCAPTCHA や レートリミットを推奨。
- 機能制限
- 無料プランでも ライセンス検証APIは同一(is_premium系ロジックに影響なし)。
- ただし 有効期限・機能差分はプラン側のメタデータで制御。
- アップグレード導線
- ユーザーポータルのライセンス詳細に 「上位プランへ」 を常設。
- 差額課金に誘導(下記「差額課金」章と連携)。
よくあるユースケース
- パブリックβ/教育NFR/期間限定キャンペーン
→ 失効日時(expires_at)を設定し、有効期限切れ後は自動で検証NGに。 - 永久無料の“Lite”
→activation_limitを低めに(例1サイト)、上位プランで拡張。
クーポン(Coupons)
クーポン種別
- 割合割引:例)20%OFF
- 定額割引:例)¥1,000 OFF
- 100%割引(コンプ):事実上の無料化。配布/PR/サポート用途。
- 期間限定:発行〜失効の日時、曜日/時間帯限定など
- 回数制限:総発行数(N回まで)、ユーザーあたり1回 など
- 対象制限:特定プロダクト/プラン限定、通貨限定、国/リージョン限定
運用ルール(推奨)
- スタッキング規則
- 原則 1トランザクションにつき1クーポン。
(複数適用の複雑化はサポート/不正検知コストが高い)
- 原則 1トランザクションにつき1クーポン。
- 適用順序
- 定額→割合の順で計算するか、どちらか一方のみなど、ルールを固定してUIにも明記。
- 適用可否の事前判定
- チェックAPIで「対象プラン/地域/通貨/残回数/失効」を検証し、カートUIに反映。
- 監査ログ
- だれが・いつ・どのIP/UAで・どのクーポンを使ったかを注文/ライセンスの監査トレイルに保存。
- 払い戻し/キャンセル規約
- クーポン使用時の返金規則(実際支払額までを返金上限に)を明文化。
無料とクーポンの比較運用
| 項目 | 無料プラン | クーポン100%OFF |
|---|---|---|
| 管理 | プラン定義側で完結 | キャンペーン都度発行 |
| 制御 | 期限・機能差分をプランで統一管理 | 対象・回数など細かな配布制御 |
| 導線 | プラン選択に常時表示可 | 特設LP/コード入力UI経由で配布 |
| 監査 | 通常ライセンスと同一 | クーポン使用ログが追加で必要 |
- 恒常的トライアル:無料プランが向く
- プロモ/リカバリー/個別対応:クーポンが向く
不正・濫用対策(必須)
- メールドメイン制限(使い捨て/一時メールのブロックリスト)
- レートリミット(IP×メール×時間)
- ドメイン正規化(
example.comとwww.example.comを統一判定) - IP/UA の保存(監査用・プライバシーポリシー整備)
- Webhookでの監視:異常発行/同一指紋の連続発行を検知し通知
- 管理画面の一括無効化:不正判定クーポンの即時停止/回収
UI/UX 要件(購入ページ)
- プランカードを複数表示(無料含む)し、特徴・制限・価格を即比較
- 無料プラン選択時は メール入力モーダル → 発行成功ダイアログ → マイページ導線
- クーポン入力欄(1行)と 事前検証ボタン(適用可否/割引額を即時表示)
- 失効間近/残回数僅少なクーポンは バッジ表示(例:残4・あと2日)
バックエンド要件(仕様)
無料プラン発行フロー(サーバ)
product_idとplan_idの整合性チェック- 価格=0 を確認
- メール検証(フォーマット/ドメイン/レートリミット/既存ライセンス数)
- ライセンスレコード生成(
activation_limit/expires_at/status=active) - 確認メール送信(任意:確認完了で
verified_at) - Webhook発火:
license.issued.free,license.email_verification.sent
クーポン適用フロー(サーバ)
product_id/plan_idを受領- クーポン文字列受領→検証API
- 対象/期限/回数/ユーザー適格性/通貨/地域/併用可否
- 小計→割引→税込合計の算出(丸めの一貫性を保証)
- チェックアウトセッション作成(メタ:
coupon_id・割引内訳) - Webhook発火:
coupon.applied.preview, 決済成功後coupon.redeemed
アップグレード連携(差額課金の前提)
- 無料→有料 は
旧=0円なので全額が請求。 - クーポンで購入済み の場合も、実支払額を基準に差額を計算。
例)定価¥10,000 → 20%OFFで¥8,000支払い → 上位¥15,000へ
→ 差額 = ¥15,000 – ¥8,000 = ¥7,000
監査・レポート
- KPI:
- 無料発行数/有料転換率(Free→Paid CVR)、平均転換日数
- クーポン別売上/使用率/不正率
- ダッシュボード:期間フィルタ・プラン別円グラフ・発行/転換の時系列
エラーハンドリング(例)
invalid_coupon:存在しない/失効/対象外coupon_limit_reached:発行上限到達rate_limited:無料発行の過剰試行plan_mismatch:product/plan の不整合already_owned_free:同一メールの無料重複
(エラー規約はSDK/RESTの共通表に統一、翻訳文字列を提供)
テスト観点(チェックリスト)
- 無料:同一メール2回目でブロックされる
- 無料:メール未確認のままでは検証NG(任意要件の場合)
- クーポン:対象外プランで拒否される
- クーポン:1ユーザー2回目で拒否される
- 差額:過去支払額を正しく参照し不足分のみ請求
- Webhook:全イベントが一意ID付きで発火・再送安全
まとめ
- 無料プランは恒常的な“入口”として、クーポンは戦術的な“ブースト”として使い分けます。
- 不正対策・監査・差額課金との整合を最初から設計しておくことで、運用コストを低減しつつ成長を加速できます。