# MSP課金

## はじめに

MSP課金エンドポイントは、Keeperのマネージドサービスプロバイダー (MSP) およびディストリビューター向けに、課金データ、利用状況指標、アカウント管理機能へプログラムからアクセスするためのエンドポイントです。パートナーは、このエンドポイントを利用して、現在および過去の利用状況データを取得し、トライアルおよび有償アカウントを管理し、PSA (プロフェッショナルサービス自動化) や財務システムと課金情報を連携できます。

MSP課金APIは、REST形式のインターフェースを通じて、課金情報やアカウントのライフサイクルデータを提供します。これにより、従量課金の照合、自動アカウントプロビジョニング、財務レポートとの連携が可能になります。

## 概要

管理者向けREST APIのMSP課金エンドポイントは、KeeperのMSPエコシステム向けに、包括的な課金およびアカウント管理機能を提供します。この機能は、次のような重要なパートナー業務を支援します。

### 課金照合

すべての管理対象企業 (MC) に対する現在および月次の利用状況データを取得できます。ConnectWise、Datto、Gradient MSPなどのPSAプラットフォームと連携することで、課金照合や請求書作成を自動化できます。

### アカウントライフサイクル管理

トライアルアカウントの作成、トライアルから有償サブスクリプションへの移行、期限切れアカウントの再有効化、有償アカウントの解約をプログラムで実行できます。管理コンソールでの手作業を行うことなく、顧客ライフサイクル全体を自動化できます。

### 利用状況分析

すべての管理対象企業におけるライセンス消費状況を追跡できます。製品の利用状況、セキュアアドオンの導入状況、ストレージ消費量を把握し、キャパシティ計画やアップセルの判断に役立てられます。

### 財務レポート

会計システムと連携するために課金データをエクスポートできます。顧客別の売上、製品構成の分析、月次経常収益 (MRR) の追跡に関するレポートを作成できます。

## 要件

* 有効なKeeper MSPまたはディストリビューターアカウントが必要です。
* [高度なレポートとアラートモジュール (ARAM)](/enterprise-guide/jp/event-reporting.md) のアドオンが有効になっている必要があります。
* Keeperから提供されたAPIキーが必要です (サポート担当者にお問い合わせください)。
* JWT生成用の事前共有シークレットが必要です。
* Keeperによって割り当てられたベンダー名が必要です。

## 構成

### APIトークンの生成

課金APIを使用する場合は、以下のようにAPIトークンを生成する際に `BILLING` の読み取りロールを指定してください。

```bash
# 30日間有効なBILLINGキー(読み取り)
public-api-key generate --name "Billing Integration" --roles "BILLING:1" --expires 30d
```

### MSP課金利用状況API

#### エンドポイント

```
GET bi_api/rest/public/msp/billing-usage
```

#### 目的

認証済みのMSPおよび紐付けられた管理対象企業 (MC) について、指定した月と年における月次の課金利用状況を取得します。取得対象には、単価、基本ライセンスおよびアドオンの利用状況、数量、関連する費用が含まれます。

#### 認証

x-api-tokenヘッダにAPIトークンを指定します。

```
x-api-token: Bearer <API_TOKEN>
```

#### クエリパラメータ

| 名前    | 型  | 必須 | 説明                                             |
| ----- | -- | -- | ---------------------------------------------- |
| month | 整数 | はい | `1`〜`12`の単一の数値を指定します。先頭に0は付けません (例: `1`、`11`)。 |
| year  | 整数 | はい | 4桁の年を指定します (例: `2025`、`2023`)。                 |

#### ヘッダ

| ヘッダ           | 例                    |
| ------------- | -------------------- |
| `x-api-token` | `Bearer <API_TOKEN>` |

#### リクエスト例

ページネーションなしのリクエスト例

```bash
curl --location '<https://keepersecurity.com/bi_api/rest/public/msp/billing-usage?month=8&year=2025>' \
--header 'x-api-token: Bearer g0mNDtMW6zkJl0Jcxv-4kJH9beIrIsLqVvvDOhp0'
```

#### 成功時のレスポンス例 (200)

```json
{
    "total": 3.91,
    "tax": 0.51,
    "currency": "USD",
    "mcItems": [
        {
            "total": 3.4,
            "companyName": "free mc",
            "products": [
                {
                    "unitPrice": 3.4,
                    "unit": "user",
                    "quantity": 1,
                    "productId": 10010,
                    "productName": "Keeper Enterprise Bundle",
                    "avgMonthlyCost": 3.4
                }
            ]
        }
    ],
    "subTotal": 3.4,
    "mspItem": {
        "total": 3.4,
        "companyName": "free msp",
        "products": [
            {
                "unitPrice": 3.4,
                "unit": "user",
                "quantity": 1,
                "productId": 720,
                "productName": "MSP Base License",
                "avgMonthlyCost": 3.4
            }
        ]
    }
}
```

#### エラーコード

| コード | メッセージ             | 原因                             |
| --- | ----------------- | ------------------------------ |
| 400 | monthが未指定、または無効です | monthの値が不正です                   |
| 400 | yearが未指定、または無効です  | yearの値が不正です                    |
| 403 | アクセスが拒否されました      | 管理対象企業 (MC) がAPIにアクセスしようとしています |
| 401 | 認証されていません         | トークンが無効、または指定されていません           |
| 500 | 内部サーバーエラー         | 予期しないエラーが発生しました                |

***

#### セキュリティに関する注意事項

* APIトークンはパスワードと同様に扱い、定期的にローテーションしてください。
* 必要最小限のロールと操作に権限を制限してください。
* 有効期限はできるだけ短く設定し、無期限は特別な自動化用途に限って使用してください。
* トークンは安全な場所 (例: Keeperボルト) に保管してください。

## MSP現在の利用状況API

#### エンドポイント

```
GET bi_api/rest/public/msp/current-usage
```

#### 目的

認証済みのMSPおよび紐付けられた管理対象企業 (MC) について、現在の利用状況 (基本ライセンスおよびアドオン) のスナップショットを取得します。

#### 認証

`x-api-token` ヘッダにAPIトークンを指定します。

```
x-api-token: Bearer <API_TOKEN>
```

#### ヘッダ

| ヘッダ           | 例                    |
| ------------- | -------------------- |
| `x-api-token` | `Bearer <API_TOKEN>` |

#### リクエスト例

ページネーションなしのリクエスト例

```bash
curl --location '<https://keepersecurity.com/bi_api/rest/public/msp/current-usage>' \
--header 'x-api-token: Bearer g0mNDtMW6zkJl0Jcxv-4kJH9beIrIsLqVvvDOhp0'
```

#### 成功時のレスポンス例 (200)

```json
{
    "mcItems": [
        {
            "maximumAllowedUsers": 2147483647,
            "companyName": "free mc",
            "plan": "Keeper Enterprise Bundle",
            "invitedUsers": 0,
            "products": [
                {
                    "unit": "user",
                    "quantity": 1,
                    "productId": 10010,
                    "productName": "Keeper Enterprise Bundle"                    
                }
            ]
        }
    ],
    "mspItem": {
        "companyName": "free msp",
        "invitedUsers": 2,
        "products": [
            {
                "unit": "user",
                "quantity": 1,
                "productId": 720,
                "productName": "MSP Base License"
            }
        ]
    }
}
```

#### エラーコード

| コード | メッセージ        | 原因                             |
| --- | ------------ | ------------------------------ |
| 403 | アクセスが拒否されました | 管理対象企業 (MC) がAPIにアクセスしようとしています |
| 401 | 認証されていません    | トークンが無効、または指定されていません           |
| 500 | 内部サーバーエラー    | 予期しないエラーが発生しました                |


---

# 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/keeperpam/jp/commander-cli/admin-rest-api/msp-billing.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.
