A Activatist API 日本人開発者向けガイド

Invite-only closed beta / Stripe test mode

ソフトウェアのライセンス販売とアクティベーションを、まず1本のAPIから。

Activatist は、開発者が自分のソフトウェアのライセンスキーを販売し、購入後にアプリ内で検証・有効化できるようにするAPIです。このページはプログラム初学者でも実装できるように、用語、流れ、主要言語のコード例を日本語でまとめています。

POST /v1/licenses/activate
Content-Type: application/json

{
  "product_id": "prod_123",
  "license_key": "LIC1-XXXX-XXXX-XXXX-XXXX",
  "device_fingerprint": "device-abc"
}
現在の前提: 招待制 closed beta です。Stripe は test mode、live 決済と一般公開は別レビューが必要です。ギフトカード、ポイント、第三者キー転売、C2C resale には使えません。

Choose Your Path

あなたはどちらですか?

Concepts

まず押さえる4つの言葉

Product

販売するソフトウェア本体です。例: デスクトップアプリ、プラグイン、開発ツール。1つの Product に価格、説明、サポート先、アクティベーション上限が紐づきます。

License Key

購入後に発行されるキーです。ユーザーがアプリに入力し、アプリが Activatist API に送って検証します。ログに出してはいけません。

Activation

「この端末で使い始める」操作です。同じ端末の再アクティベーションは冪等で、別端末は activation_limit を超えると拒否されます。

Device Fingerprint

端末を見分けるためのアプリ側IDです。メールアドレスや氏名などの個人情報を入れず、安定したランダムIDを使います。

Before You Start

実装前に必要なもの

API base URLhttps://license.souko.work
product_idActivatist上の商品ID。販売者画面やAPIで作成したProductから取得します。
license_key購入完了ページで表示されるキー。例: LIC1-XXXX-XXXX-XXXX-XXXX
device_fingerprintアプリが生成・保存する匿名の端末ID。個人情報を入れません。

Quickstart

最短の実装手順

  1. 購入後にライセンスキーを受け取るユーザーは購入完了ページでライセンスキーを確認します。メールにはキーではなく完了リンクだけが届きます。
  2. アプリにライセンス入力欄を作るユーザーが `LIC1-...` のようなキーを入力します。
  3. 端末IDを用意する初回起動時にランダムIDを生成し、アプリ設定に保存します。個人情報は使いません。
  4. `/v1/licenses/activate` を呼ぶ成功したらアプリを有料機能ONにします。失敗時はエラー内容をユーザーに表示します。
  5. 起動時は `validate` を使う毎回 activate せず、起動時チェックは validate が基本です。

Lifecycle

validate / activate / deactivate の使い分け

タイミング呼ぶAPI理由
初回ライセンス入力activateこの端末を利用枠として登録します。
アプリ起動時validateseatを増やさず、revoke/refund/expiredを確認します。
24時間に1回程度validate状態変化を反映しつつ、過剰なAPI呼び出しを避けます。
ユーザーが端末解除deactivateポリシーが許す場合に利用枠を空けます。
ネットワーク不通短いgrace最後の成功状態を短時間だけ使い、復旧後にvalidateします。

Device Fingerprint

端末IDは「個人情報ではない安定ID」にする

推奨は、アプリごとにランダムUUIDを生成し、OSの安全な保存先に保存する方式です。メール、氏名、電話番号、IPアドレス、raw hardware serial は使いません。

macOS

Application Support 配下、可能なら Keychain。ファイル保存なら権限を絞ります。

Windows

AppData 配下、可能なら Credential Manager / DPAPI を検討します。

Linux

XDG config 配下に保存し、権限は `0600` 相当にします。

iOS / Android

Keychain / Keystore / Secure Storage を使います。

Electron

`app.getPath("userData")` と OS secure storage を組み合わせます。

Browser

localStorage は消える可能性があります。web-only appではseat管理に注意します。

Activation Deep Dive

アクティベーションを重点的に理解する

アクティベーションは「ライセンスキーが正しいか」だけでなく、「この端末を利用枠として登録できるか」も確認します。

1ユーザーがキー入力

アプリの設定画面や初回起動画面で受け取ります。

2端末IDを作る

個人情報を含まない安定IDをローカル保存します。

3activateを呼ぶ

product_id、license_key、device_fingerprint を送ります。

4結果を保存

valid=true なら有料機能を有効にします。

成功するケース

  • ライセンスが active
  • Product が一致している
  • 同じ端末で再実行した
  • 別端末でも activation_limit 内

失敗するケース

  • キーが存在しない、または別Product用
  • refund / dispute / revoked / suspended / expired
  • 別端末が上限を超えた
  • device_fingerprint が空、または不安定

Runtime Endpoints

アプリに組み込む3つのAPI

POST/v1/licenses/validate

起動時や定期チェックで使います。activation_count は増えません。

POST/v1/licenses/deactivate

端末の解除で使います。ポリシー上許可されている場合、利用枠を空けます。

Code Samples

主要言語のアクティベーション実装例

SDKを使う場合は SDKガイド から始めるのが最短です。下のタブはHTTPを直接呼ぶ場合の参考例です。

JavaScript

ブラウザやElectronで使いやすい fetch の例です。

Errors

エラー時の考え方

HTTP意味アプリ側の表示例
400入力が不足、形式が不正入力内容を確認してください。
403キーが使えない状態このライセンスは利用できません。
404対象が見つからないライセンス情報が見つかりません。
409アクティベーション上限超過利用可能な端末数の上限に達しました。
429短時間にリクエストが多すぎる少し待ってから再試行してください。

API Map

API一覧

スキーマやrequest/responseの詳細は Interactive API Reference で確認できます。

購入・利用者向け

  • GET /v1/public/products/{slug}
  • POST /v1/public/products/{slug}/checkout
  • POST /v1/purchases/complete
  • POST /v1/purchases/files/{file_id}/download-intent
  • POST /v1/licenses/validate
  • POST /v1/licenses/activate
  • POST /v1/licenses/deactivate

販売者向け

  • POST /v1/sellers
  • POST /v1/sellers/stripe/account-link
  • POST /v1/products
  • POST /v1/products/{product_id}/submit-review
  • POST /v1/products/{product_id}/files/upload-intent
  • POST /v1/products/{product_id}/files/{file_id}/finalize

管理・運用向け

  • GET /v1/admin/sellers
  • PATCH /v1/admin/products/{product_id}/review
  • GET /v1/admin/product-files
  • PATCH /v1/admin/products/{product_id}/files/{file_id}/review
  • POST /v1/stripe/webhook
  • GET /readyz

Checklist

実装前チェックリスト

Safety Rules

実装時にやってはいけないこと

ログに出さない

ライセンスキー、completion token、buyer email、Firebase token、Bearer token、Stripe/Resend/R2/Cloudflare の秘密情報、presigned URL はログや共有メモに出さないでください。

端末IDに個人情報を使わない

device_fingerprint にメールアドレス、氏名、電話番号、住所などを入れないでください。ランダムIDを作って端末内に保存する方式が扱いやすいです。

毎回 activate しない

起動時チェックは validate、端末登録は activate、端末解除は deactivate と役割を分けると、ユーザー体験とサーバー負荷が安定します。

対象外の商品に使わない

Activatist は first-party software license 用です。ギフトカード、ポイント、第三者キー転売、C2C resale には使えません。