メインコンテンツにスキップ
API仕様 v2.3

認証API

標準化されたGETクエリインターフェースを通じて、moonpacketはあなたのサーバーから「報酬ルール」と「ユーザー属性」を積極的に取得します。すべての論理判断はmoonpacketによって処理されます。

インタラクションロジック

全プロセスは2つのフェーズに分かれています: 'セットアップフェーズ' と 'ランタイムフェーズ'。moonpacket は GET メソッドを使用してあなたの API にリクエストを送信します:

moonpacket クライアント / サーバー 論理的マッチ(ローカル) ルールが保存されました: Level >= 10 ユーザーのステータス: Level = 12 ✓ 報酬を配布 ⚙️ あなたのAPI GET /check ?user_id=... 1. セットアップ中:取得ルール (GET) 2. クレーム中: ステータスを照会 (GET) JSONデータ
← 左右滑動查看流程 →
ステップ1

フェーズ1: ルールの定義(設定)

トリガーイベント: 'クレーム条件設定' にURLが入力され、送信されたとき

GET GET
RET 演算子(gt, eq, lt...)を持つルール定義オブジェクトを返します
ステップ2

フェーズ2: ユーザーの検証(実行時)

トリガーイベント: ユーザーがレッドパケットを申請しようとしたとき

GET ?user_id=...
RET 特定のユーザーの実際の属性値(プレーン値または文字列)を返します

💡 サポートされている演算子: `eq` (等しい、文字列/数字をサポート), `gt` (より大きい), `gte` (以下または等しい), `lt` (より小さい), `lte` (以下または等しい)。非`eq`演算子の値は数字である必要があります。

アプリケーションシナリオ

🎮

GameFi統合

ルール『level >= 10』を定義します。ユーザーが請求すると、moonpacketはユーザーの属性を確認します。もし`level: 12`であれば、承認されます。

🆔

IDバインディング報酬

`kyc == true` というルールを定義します。moonpacket はユーザーのステータスを確認し、もし `kyc: true` が返された場合、報酬が配布されます。

🚀

ブラックリストフィルタリング

ルール `is_blacklist == false` を定義します。APIが `is_blacklist: true` を返す場合、申請は拒否されます。

通信の例(GETリクエスト)

Mode A 1. ルールを定義する (セットアップ)

設定を送信する際は、演算子を含むJSONを返してください。

リクエスト内容
GET /check HTTP/1.1
Host: api.your-game.com
Content-Type: application/json
X-API-KEY: 1234567890
X-API-TIMESTAMP: 1698765432
X-API-NONCE: 987654
X-API-SIGNATURE: 5d41402abc4b2a76b9719d911017c592...

# No user_id = Get Rules
結果を返す (200 OK)
{
  "data": {
    "level": {
      "gt": 99
    },
    "status": {
      "eq": "active"
    },
    "is_blacklist": {
      "eq": false
    }
  }
}

Mode B 2. クエリステータス(ランタイム)

ユーザーがクレームを行った場合、純粋な値または文字列を返します。

リクエスト内容
GET /check?user_id=666666666 HTTP/1.1
Host: api.your-game.com
Content-Type: application/json
X-API-KEY: 1234567890
X-API-TIMESTAMP: 1698765432
X-API-NONCE: 123456
X-API-SIGNATURE: a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6...

# With user_id = Get User Status
結果を返す (200 OK)
{
  "data": {
    "level": 100,
    "status": "active",
    "is_blacklist": false
  }
}

データ構造定義(TypeScript)

types.d.ts
// Step 1: Rules Definition
interface RulesResponse {
  data: {
    [key: string]: {
      eq?: string | number | boolean;
      gt?: number;
      gte?: number;
      lt?: number;
      lte?: number;
    };
  };
}

// Step 2: User Status
interface UserStatusResponse {
  data: {
    [key: string]: string | number | boolean;
  };
}

🔐 セキュリティ検証

リクエストの信頼性を確保するために、moonpacketはヘッダーに署名を含めます。検証のために右側のコードを参照してください:

必要なヘッダー

X-API-KEY
X-API-TIMESTAMP
X-API-NONCE
X-API-SIGNATURE

署名アルゴリズム

署名 = HMAC_SHA256(秘密, 本文 + タイムスタンプ + ノンス)
verify.ts
import crypto from "crypto";

// 1. Generate Signature
function generateSignature(
  apiSecret: string,
  body: object,
  timestamp: number,
  nonce?: string
) {
  const payload = JSON.stringify(body) + timestamp + (nonce || "");
  return crypto.createHmac("sha256", apiSecret).update(payload).digest("hex");
}

// Client Usage Example
const apiKey = "client123";
const apiSecret = "mysecretkey";
const body = { /* Query Params or Body */ }; 
const timestamp = Date.now();
const nonce = crypto.randomBytes(8).toString("hex");

const signature = generateSignature(apiSecret, body, timestamp, nonce);

console.log({ apiKey, timestamp, nonce, signature });

// 2. Verify Signature
function verifySignature(
  apiSecret: string,
  body: object,
  timestamp: number,
  nonce: string,
  signature: string
) {
  const expected = generateSignature(apiSecret, body, timestamp, nonce);
  return expected === signature;
}

// Verification Result
const isValid = verifySignature(apiSecret, body, timestamp, nonce, signature);
console.log("Is Valid:", isValid);

⚠️ 注意

  • タイムアウト: APIが3秒内に結果を返せることを確認してください。
  • フォーマット: JSON構造を厳守してください。さもないと解析エラーが発生します。

ステータスコード

ステータスコード ステータス 説明
200 OK リクエスト成功
400 不正なリクエスト リクエストパラメータエラー(例:フォーマットが不正です)。
401 認証されていません Authorization Headerが欠損しているか、キーが無効です。
403 禁止 IP制限やリソースへの無許可アクセス。
404 見つかりません ユーザーIDが存在しません(ユーザーステータスシナリオのクエリ用)。
500 サーバーエラー 内部サーバーエラー。

⚠️ 第三者API免責事項

本ドキュメントに記載されているサードパーティプラットフォームの統合方法は、参考の目的のみです。開発者はプラットフォームの最新の公式開発者ドキュメントを参照し、遵守する必要があります。