# API経由での学生プランの提供

Keeperエンタープライズライセンスをお持ちの対象大学では、学生向けにフル機能のパスワードマネージャーアカウントを自動でプロビジョニングできます。

### 各学生に含まれるもの <a href="#what-each-student-gets" id="what-each-student-gets"></a>

* **Keeperアンリミテッド** — フル機能のパスワードマネージャー
* **BreachWatch** — ダークウェブの監視
* **10GBの暗号化ファイルストレージ**

### 重要な情報 <a href="#important-information" id="important-information"></a>

{% hint style="warning" %}
**セカンダリドメインが必要です。** 学生アカウントでは、大学のプライマリドメイン (例: `@university.edu`) を使用できません。 `@students.university.edu` のようなセカンダリまたはエイリアスドメインを用いて、学生アカウントとエンタープライズ環境を分離してください。
{% endhint %}

{% hint style="danger" %}
**学生アカウントは独立しており、エンタープライズでは管理されません。** 2FAの適用、ボルトの監査、アカウントのリセットは行えません。学生は個人向けサブスクリプションと同様に、ご自身でアカウントを管理します。管理側で統制が必要な場合は、学生を **エンタープライズプランの有償ユーザー** として追加してください。
{% endhint %}

***

## セットアップ手順 <a href="#setup-guide" id="setup-guide"></a>

### 手順1—前提条件の確認 <a href="#step-1-confirm-prerequisites" id="step-1-confirm-prerequisites"></a>

以下をご用意ください。

* 有効なKeeperエンタープライズライセンス
* 学生用のセカンダリ/エイリアスメールドメイン (例: `@students.university.edu`)
* REST API呼び出しができるIT開発者

***

### 手順2—KeeperへのAPI認証情報の依頼 <a href="#step-2-request-api-credentials-from-keeper" id="step-2-request-api-credentials-from-keeper"></a>

Keeperの担当者に連絡し、以下を依頼してください。

* **Partner Name** — Keeperシステム上の大学の識別子
* **Partner Secret** — リクエストごとにセキュアなハッシュを生成するためのシークレット文字列

これらはKeeperレコード経由で安全に共有されます。

{% hint style="success" %}
この2つの値がないと先に進めません。まだ受け取っていない場合は、Keeper担当者にご連絡ください。
{% endhint %}

***

### 手順3—API呼び出しの理解 <a href="#step-3-understand-the-api-call" id="step-3-understand-the-api-call"></a>

各学生アカウントは、GETリクエストを1回送ることで作成されます。

```
GET https://keepersecurity.com/bi_api/v1/services/partner/create-license
```

#### パラメータ <a href="#parameters" id="parameters"></a>

| 名前               | 型       | 説明                         | 備考                            |
| ---------------- | ------- | -------------------------- | ----------------------------- |
| `first_name`     | string  | 名 (ファーストネーム)               | 必須                            |
| `last_name`      | string  | 姓 (ラストネーム)                 | 任意                            |
| `email`          | string  | 学生のメールアドレス                 | 必須・セカンダリドメインを使用               |
| `transaction_id` | string  | リクエストごとに割り当てる一意のID         | 必須・社内記録用。例: `UNIV-2024-00123` |
| `hash`           | string  | SHA-256セキュリティハッシュ (下記参照)   | 必須                            |
| `partner_name`   | string  | Keeperから付与された Partner Name | 必須                            |
| `product_type`   | integer | 学生プランの場合は常に `4`            | 必須・固定値                        |

**ハッシュの生成:** 学生のメールアドレスと Partner Secret を連結し、SHA-256でハッシュ化します。

```
hash = SHA256.hexdigest.bytesToHex(email + secret)
```

コマンドライン:

```bash
echo -n "student@students.university.edu+PARTNER_SECRET" | openssl dgst -sha256
```

#### **GETリクエストのURL例**

```http
GET https://keepersecurity.com/bi_api/v1/services/partner/create-license?product_type=4&transaction_id=UNIV-2024-00123&first_name=Jane&last_name=Smith&email=student@students.university.edu&hash=b94f6f125c79e3a5ffaa826f584c10d52ada669e6762051b826b55776d05a8d4&partner_name=YOUR_PARTNER_NAME
```

#### **レスポンス** <a href="#response" id="response"></a>

| コード   | ステータス      | 意味                                                  |
| ----- | ---------- | --------------------------------------------------- |
| `200` | ✅ 成功       | アカウント作成済み—レスポンスの `vault_url` を使って学生にアクティベーションリンクを送付 |
| `400` | ❌ 不正なリクエスト | 必須フィールドの欠落または形式不正                                   |
| `401` | ❌ 認証エラー    | ハッシュ不正・ `email + secret` を余分なスペースを入れずこの順で連結しているか確認  |

例:

{% tabs %}
{% tab title="200" %}

```json
{
  "success": true,
  "order_number": "12345678-1234",
  "vault_url": "keepersecurity.com/vault/#"
}
```

{% endtab %}

{% tab title="400" %}

```json
{
  "success": false,
  "message": "Invalid request - Missing required fields"
}
```

{% endtab %}

{% tab title="401" %}

```json
{
  "success": false,
  "message": "Invalid Hash Value - UnAuthorized"
}
```

{% endtab %}
{% endtabs %}

***

### 手順4—統合の実装 <a href="#step-4-implement-the-integration" id="step-4-implement-the-integration"></a>

入学手続きなど、新規の学生ごとにこのAPIを呼び出します。動作確認済みのNode.jsサンプルを以下に示します。

```js
// npm install request crypto-js
var request = require('request');
var CryptoJS = require('crypto-js');

// Keeperから付与された認証情報
var secret = 'PARTNER_SECRET';
var partner_name = 'PARTNER_NAME';

// 学生の属性
var email = 'EMAIL';
var first_name = 'FIRST_NAME';
var last_name = 'LAST_NAME';
var transaction_id = 'TRANSACTION_ID';

// ハッシュの生成: SHA256(email + secret)
var hash = CryptoJS.SHA256(email + secret);

var options = {
  'method': 'GET',
  'url': 'https://keepersecurity.com/bi_api/v1/services/partner/create-license?product_type=4&transaction_id='+transaction_id+'&first_name='+first_name+'&last_name='+last_name+'&email='+email+'&hash='+hash+'&partner_name='+partner_name+'',
  'headers': {
      'Content-Type': 'application/json'
  }
  };

  request(options, function (error, response) {
      if (error) console.log("Error From the server: "+error);
      console.log("response body: "+response.body);
      console.log("response status: "+response.statusCode);
  });
```

***

### 手順5—学生がアカウントをアクティベート <a href="#step-5-student-activates-their-account" id="step-5-student-activates-their-account"></a>

プロビジョニング後、レスポンスに含まれる `vault_url` を学生へ送付できます。学生は独自のマスターパスワードを設定し、大学側が学生のボルトにアクセスすることはありません。

***

### 手順7—ライセンスの年次更新 <a href="#step-7-renew-licenses-annually" id="step-7-renew-licenses-annually"></a>

ライセンスの有効期間は**1年**です。ご利用のエンタープライズが更新対象であれば、学生アカウントはKeeperにより自動更新されます。

***

## 実例—実運用でのフル自動化 <a href="#example-full-automation-in-practice" id="example-full-automation-in-practice"></a>

このAPIはシンプルなため、自動プロビジョニングのパイプラインへの組み込みが容易です。大学がエンドツーエンドで実装する例は以下のとおりです。

1. **学生データベースの照会。** 定期実行のスクリプトが毎晩実行され、現時点で在籍中かつまだKeeperアカウントを持たない学生を取得します。すでにプロビジョニング済みの学生は自動的に除外されます。
2. **Keeper APIの呼び出し。** 新規学生ごとにスクリプトがハッシュを生成し、APIリクエストを送信します。
3. **アクティベーションリンクの取得。** 成功レスポンスで返る `vault_url` をそのまま取り出し、大学側が配布方法を完全に制御できます。
4. **ブランド付きアクティベーションメールの送信。** 大学のメールシステムからリンクを送り、機関のブランドとメッセージを用います。
5. **結果の記録。** プロビジョニングに成功した学生は内部ログに記録され、次の夜間実行から除外されます。

この構成では、入学から24時間以内に新入生へKeeperアカウントが自動付与され、ITの手作業は不要です。おおむね、開発者1名で数日程度の作業で構築・展開できます。

### 追加のAPI詳細 <a href="#additional-api-details" id="additional-api-details"></a>

#### APIパラメータ <a href="#api-parameters" id="api-parameters"></a>

必要なパラメータの詳細は、以下をご参照ください。

{% content-ref url="/pages/kUDwZIjZkM4WBFU7mk5S" %}
[APIパラメータ](/enterprise-guide/jp/api-troubleshooting/api-parameters.md)
{% endcontent-ref %}

#### APIレスポンスコード <a href="#api-response-codes" id="api-response-codes"></a>

レスポンスコードの詳細は、以下をご参照ください。

{% content-ref url="/pages/zjzTmfULXVa9XQpQfeiF" %}
[APIレスポンスコード](/enterprise-guide/jp/api-troubleshooting/api-response-codes.md)
{% endcontent-ref %}

#### APIエクスプローラ <a href="#api-explorer" id="api-explorer"></a>

Postmanや[swaggerエディタ](https://editor.swagger.io/)など別ツールでAPIを調べる場合は、関連するAPIのYAML定義を以下からダウンロードしてください。

swaggerを使ったAPI探索の詳細は、以下をご参照ください。

{% content-ref url="/pages/tJ3aHoJNHqBeZ3TaRg8o" %}
[APIエクスプローラ - Swagger](/enterprise-guide/jp/api-troubleshooting/api-explorer-swagger.md)
{% endcontent-ref %}

{% hint style="info" %}
これらのAPIの利用についてサポートが必要な場合や追加の質問がある場合は、サポートまたは営業担当者にお問い合わせください。
{% endhint %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.keeper.io/enterprise-guide/jp/personal-vaults-for-enterprise-and-business-users/provision-student-plans-via-api.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
