API 仕様
共通ベース URL(Host)
- Preview(テスト):
https://app-api-reward.unifi.me - Production(本番):
https://api-reward.unifi.me
ユーザーマッピング状態の確認
特定のユーザーが現在 Unifi アカウントと連携済みかどうかを確認します。
GET /v1/mission-users
| Section | Name | Type | Req | Description |
|---|---|---|---|---|
| Header | X-Partner-Id | String | Y | 発行された Partner ID |
| Header | X-Api-Key | String | Y | 発行された API Key |
| Query | partnerUid | String | Y | お客様のサービス内における一意のユーザー ID |
| Response | result | Boolean | Y | マッピング状態(true: 連携済み、false: 未連携) |
Unifi Login の Auth URL(Auth)
ユーザーを Unifi のログイン画面へリダイレクトし、ワンタイムマッピングトークンの発行をトリガーする、フロントエンド専用の API です。(ブラウザの直接遷移であるため、ヘッダー認証キーは含みません)
GET /v1/mission-users/auth
| Section | Name | Type | Req | Description |
|---|---|---|---|---|
| Query | partnerId | String | Y | お客様に発行された Partner ID |
| Query | redirectUrl | String | Y | ログイン後に戻るサービス Mini App の URL(*URL エンコードが必要) |
| Query | browserType | String | N | 接続環境を指定します(MINI: LINE MINI、LIFF: LINE LIFF、WEB: その他。空の場合は WEB として動作します) |
| Response | 302 Found | - | - | 構築された LINE LIFF ログイン URL へブラウザを即座にリダイレクトします |
ユーザーマッピングの登録(Connect)
ワンタイムマッピングトークンを使用して、Unifi アカウントとお客様のサービスアカウント間の連携を確定します。
POST /v1/mission-users/connect
| Section | Name | Type | Req | Description |
|---|---|---|---|---|
| Header | X-Partner-Id | String | Y | 発行された Partner ID |
| Header | X-Api-Key | String | Y | 発行された API Key |
| Body (JSON) | token | String | Y | URL パラメータ経由で受信したワンタイムマッピングトークン |
| Body (JSON) | partnerUid | String | Y | お客様のサービス内における一意のユーザー ID |
| Body (JSON) | region | String | Y | ユーザーの国コード(例:KR, JP, TW など) |
| Response | 200 OK | - | - | ボディは空、マッピング成功 |
ミッションの達成(Achieve)
ユーザーのミッション進捗および最終的な完了状態を、Unifi サーバーへリアルタイムで upsert します。(セキュリティと IP 制限:事前に合意したお客様のサービスサーバーの Outbound IP(Whitelist)からのみ呼び出すことができます)
この API が呼び出されると、Unifi はリクエストに含まれる missionKey からミッションを特定し、達成内容が有効かどうかを検証したうえで報酬を支払います。
POST /v1/achieve
| Section | Name | Type | Req | Description |
|---|---|---|---|---|
| Header | X-Partner-Id | String | Y | 発行された Partner ID |
| Header | X-Api-Key | String | Y | 発行された API Key |
| Body (JSON) | partnerUid | String | Y | お客様のサービス内における一意のユーザー ID |
| Body (JSON) | missionKey | String | Y | Unifi から提供された Mission Key |
| Body (JSON) | completed | Boolean | Y | ミッションの完了状態(一度 true が保存されると元に戻すことはできません) |
| Body (JSON) | metadata.target | Int | N | ミッションの最大目標値(進捗ゲージ UI 用) |
| Body (JSON) | metadata.current | Int | N | ミッションの現在の進捗値 |
| Response | 200 OK | - | - | ボディは空、保存成功 |
データ送信例(JSON Payload)
{ "partnerUid": "user_77799", "missionKey": "SAMPLE_MISSION_KEY_001", "completed": false, "metadata": { "target": 30, "current": 5 } }
エラーコード
| Code | Name | Category |
|---|---|---|
| 901 | ADMIN_PERMISSION_DENIED | Admin |
| 1101 | NOT_FOUND_MISSION_GROUP | MissionGroup |
| 1201 | NOT_FOUND_MISSION | Mission |
| 1401 | NOT_FOUND_REWARD_ASSET | RewardAsset |
| 1402 | NOT_SET_REWARD_ASSET_DECIMALS | RewardAsset |
| 1902 | NOT_FOUND_REWARD_BUDGET | Budget |
| 2101 | NOT_FOUND_PROMOTION | Promotion |
| 2102 | IMMUTABLE_PROMOTION_FIELD | Promotion |
enum 定義
| Enum Name | Values | Description |
|---|---|---|
| PromotionType | COMPOSITE, DAILY_CHECK | プロモーションタイプ |
| PromotionStatus | ACTIVE, INACTIVE | プロモーションの有効/無効状態 |
| RecurrenceType | ONE_TIME, DAILY, WEEKLY, MONTHLY | 繰り返し周期 |
| RewardType | FIXED, LUCKY_DRAW | 固定報酬 / Lucky Draw |
| BudgetType | FIXED, LUCKY_DRAW | 予算タイプ |
| AssetType | FT | アセットタイプ |
| ClaimStatus | RESERVED, REQUESTED, REJECTED, SUCCEEDED, FAILED | 報酬請求(Claim)状態 |
| TicketFilter | NOT_RECEIVED, RECEIVED, DRAWN | チケットフィルター |