SaaS 出品者向けガイド
自分の SaaS に決済機能を、1 分で。
自分でデプロイ済みの SaaS に myAI を組み込めば、Stripe アカウントなし・法人化なし・税務知識ゼロ で 月額販売を開始できます。あなたはライセンスキー検証 API を 1 回呼ぶだけ。残りはすべて myAI が代行します。
✓ myAI に任せれば、これらが全部消えます
- ✓ Stripe アカウント開設・審査
- ✓ 決済画面 (カード・Apple Pay 等) の実装
- ✓ 月額課金の自動処理
- ✓ 解約・返金の処理
- ✓ カード期限切れのリトライ
- ✓ 領収書・適格請求書 (インボイス) の発行
- ✓ 消費税の計算・申告・納付
- ✓ 特定商取引法に基づく表記
- ✓ チャージバック対応
- ✓ 課金に関するカスタマーサポート一次対応
- ✓ 確定申告用の売上集計
- ✓ 個人事業主登録 (業務委託料受領で OK)
myAI が myAI として単独で決済を受領し、あなたへは月次で 業務委託報酬として銀行振込します(売上の 90%、手数料 10%)。
仕組みを 3 行で
- 買い手が myAI で月額契約 → ライセンスキー発行
- 買い手が SaaS でアカウント作成 → 設定画面でキー入力
- SaaS が myAI verify API でキーが active か確認 → アクセス制御
API 仕様
POST
https://my-ai.community/api/v1/license/verifyBody:
{ "license_key": "<buyer_provided_key>" }代わりに Authorization: Bearer <key> ヘッダ or ?key= クエリでも OK。
Response (active な場合):
{
"active": true,
"product_id": "uuid",
"buyer_external_id": "abc123def456...",
"expires_at": null,
"billing_type": "monthly"
}Response (inactive な場合):
{
"active": false,
"reason": "not_found" | "canceled" | "expired"
}サンプルコード
JavaScript / TypeScript
// SaaS 側 (Node.js / Next.js / その他):
async function verifyLicense(licenseKey) {
const res = await fetch('https://my-ai.community/api/v1/license/verify', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ license_key: licenseKey }),
})
return res.json()
// → { active: true, product_id, buyer_external_id, ... }
// または { active: false, reason: 'canceled' }
}Python
# SaaS 側 (Python / FastAPI 等):
import requests
def verify_license(license_key: str):
res = requests.post(
'https://my-ai.community/api/v1/license/verify',
json={'license_key': license_key},
)
return res.json()PHP
// SaaS 側 (PHP / Laravel 等):
function verifyLicense($licenseKey) {
$ch = curl_init('https://my-ai.community/api/v1/license/verify');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode(['license_key' => $licenseKey]));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
return json_decode(curl_exec($ch), true);
}よくある質問
- ライセンスキーは買い手に何度も聞く必要がある?
- いいえ、初回のみ。SaaS 側でユーザーアカウントに紐づけて DB に保存しておけば、 以降はアカウントログイン状態で license verify を呼ぶだけです。
- verify API を毎リクエスト呼ぶと遅いのでは?
- SaaS 側でキャッシュ層 (60 秒) を入れることを推奨します。それでも解約から 最大 60 秒以内にアクセス遮断されるので十分実用的。
- buyer_external_id とは?
- myAI が発行する、買い手 × 商品 のオパーク ID (24 文字)。同じ買い手が 同じ商品に再加入した場合は同じ ID が返るので、SaaS 側のアカウント 紐付けに使えます。買い手の本名やメールアドレスは渡しません (プライバシー)。
- CORS は許可されている?
- はい、全オリジン (Access-Control-Allow-Origin: *) から呼べます。 ただし license_key は SaaS 側のサーバーから呼ぶ運用を推奨します (ブラウザから直接呼ぶと買い手の DevTools にキーが見える)。
- 解約された場合の挙動は?
- 即座に
{ active: false, reason: "canceled" }が返るようになります。SaaS 側はこれを検知して、有料機能をロック (or 「再契約してください」表示) するだけ。 - 実際に課金されるタイミングは?
- 買い手が「月額契約」ボタンを押すと Stripe Checkout に飛び、カード 登録 + 初回課金が走った時点で SaaS subscription が active になり、 license key が発行されます。2 ヶ月目以降は Stripe が自動で月次課金 します。失敗時は status=past_due に倒れ、myAI 側からカード情報の 更新を促すメールが送られます。
SaaS を出品する
Claude に「myAI の license verify を組み込んで」と聞けば、上のサンプルを あなたの SaaS のフレームワークに合わせて書いてくれます。