Billing Usage API ガイド
Billing Usage API を使用すると、毎月の請求書の背後にある同じ請求データにプログラムでアクセスできます。オンデマンドでコストを照会し、結果を独自のシステムに統合し、自動レポートパイプラインを構築します。
Billing Usage API は、次の必要がある場合に使用します。
- コストレポートパイプラインの自動化
- 請求データを独自のダッシュボードまたは財務システムに統合する
- オンデマンドでアカウント階層全体にわたるクエリ
- 日または月レベルでコストを集計し、前期比分析を行う
| 機能 | 課金使用状況 API | メトリック API | 財務報告 |
|---|---|---|---|
| データタイプ | 財務 (コスト) | パフォーマンス(配信、エンゲージメント) | 財務 (コスト) |
| アクセス | 非同期 API | 非同期 API | Webインターフェイス |
| 時間の粒状化 | 日、月 | 時間から年間へ | 月次合計、オプションの日の内訳 |
| 保持 | 当月 + 2 か月前 | クエリごとに最大 366 日 | 当月 + 2 か月前 |
| キャンペーン参照でフィルタ | 可 | 可 | いいえ (寸法としてのみ使用可能) |
| マルチテナント | アプリケーション、エンティティ | アプリケーション、エンティティ | アプリケーション、エンティティ |
アクセスと可用性
Billing Usage APIを使用するには、次のものが必要です。
- APIキー:
billing:usage:viewスコープが必要です。「 API 認証 を参照してください。 - コールバックURL: クエリの完了時にNTT CPaaS POSTが実行されるサーバー上のパブリックに到達可能なエンドポイント。localhost は機能しません。
- 日付範囲: データは、当月と過去 2 つの暦月の場合にのみ使用できます。
デフォルトでは、結果には、アカウント、関連するサブアカウント、および会社の下のすべてのアカウントのデータが含まれます。このクロスアカウントビューは、請求構造を反映しています。サブアカウントでログインすると、自分のデータのみが表示されます。アカウント階層と可視性を参照してください。
カバレッジ
Billing Usage API は、次のチャネルとプラットフォーム サービスをサポートしています。
請求カテゴリ コードの完全なリストについては、請求データ リファレンスの カテゴリ を参照してください。
仕組み
Billing Usage API は、非同期の要求/応答パターンを使用します。
要求を送信する
フィルター、集計ディメンション、サーバーを指す callbackUrl を使用して Billing Usage API エンドポイントに POST します。
要求 ID を受け取る
API はすぐに requestId (HTTP 201) を返します。処理は非同期に実行されます。
コールバックURLで結果を受け取る
処理が完了すると、NTT CPaaSは結果をJSONとしてcallbackUrlにPOSTします。処理時間は、クエリの複雑さと日付範囲によって異なります。
データのファイナライズ
当月の請求データは、月が終わるまで暫定的です。合計は、請求書が発行される 翌月 5 日 に確定するまで変更される場合があります。
当月のデータは、次の理由で変更される可能性があります。
- 遅れた交通記録
- 遡及的な数量ベースの割引
- 価格調整
API レスポンスには、クエリ内の各請求期間のファイナライズステータスを示すmetadata.billingPeriods配列が含まれています。財務計画または請求の目的で請求データを使用する前に、必ず請求書と照合してください。
Metrics API とより広範な比較を行うには、Metrics API を使用します。2 つの API は異なるものを測定し、直接比較することはできません。
データスコープ [#data-scope]
これらの制約は、すべての請求データ サーフェス(財務レポート、請求使用状況 API)に適用されます。
- 保持期間: 当月および最大 2 か月前
- タイムゾーン: UTC。カスタム タイム ゾーンはサポートされていません。
- マルチデータセンター: データはデータセンターごとに生成され、アクセスされます。データセンター間の集約はサポートされていません。アカウントがホストされている場所を確認するには、アカウントマネージャーまたはサポートにお問い合わせください。
- 請求書発行の調整: 請求データは、NTT CPaaS 請求書と同じ月次サイクル、通貨形式、請求構造に従います。
オプション [#options]
includeUnfinalizedData(ブール値、デフォルトはtrue):falseに設定すると、確定した請求期間のみが返され、当月の暫定データが除外されます。
リクエストを作成する
すべてのリクエストには、callbackUrl、request.filterBy.dateInterval、および request.aggregateBy の少なくとも 1 つのエントリの 3 つのフィールドが必要です。他のすべてのフィルターはオプションです。
dateInterval または aggregateBy が欠落しているリクエストは、検証エラーを返します。日付範囲は 3 か月を超えてはなりません。例 [#example]
これは、日ごとに分類された2026年4月の返品コストです。sentUntilは排他的であるため、翌月の 1 日を使用して暦月全体をカバーします。ACCOUNT_NAME と CATEGORY_CODE は、勘定またはカテゴリのディメンションが指定されていないため、デフォルトとして自動的に追加されます。
フィルター [#filters]
フィルターは、処理前に含めるデータを絞り込みます。dateInterval は必須です。その他はすべてオプションです。
| フィルター | 説明 | ノート |
|---|---|---|
| '日付間隔' | UTC での請求データの期間 | 必須です。sentSince と sentUntil を yyyy-MM-dd 形式で使用します。sentSinceは包括的で、sentUntilは排他的です。最大範囲: 当月と 2 か月前。 |
| 'カテゴリ' | フィルター処理するチャネルまたはサービス | カテゴリを参照してください。 |
| 'トラフィックタイプ' | チャネル内のトラフィックタイプ | 値はチャネルによって異なります。 |
| 「プラットフォーム」 | CPaaS Xアプリケーションとエンティティ の組み合わせ | テナントまたはユースケースごとのコストを分離するために使用します。 |
campaignReferenceIds | キャンペーン参照ID | API でのみ使用でき、財務レポートでは使用できません。 |
| 「国コード」 | 送信先の国 | ISO 3166-1 alpha-2 形式 (例: ["US", "DE"])。 |
| 'サブカテゴリ' | カテゴリ内のサービスバリアント | Viber および Voice and Video カテゴリに適用されます。サブカテゴリを参照してください。 |
accountKeys, senders, senderTypes, directions, campaignIds, templateIds | 追加のオプションフィルター | 有効な値については、課金データリファレンスを参照してください。 |
SMS_OPERATOR_FEEまたはMMS_OPERATOR_FEEカテゴリが生成されます。全額を取得するには、フィルターに両方を含めます: categories: ["SMS", "SMS_OPERATOR_FEE"])。集計ディメンション [#aggregation-dimensions]
集計ディメンションは、応答で結果をグループ化する方法を定義します。フィルターは、含まれる**データを絞り込みます。ディメンションは、グループ化の方法を定義します。たとえば、'categories: ["SMS(Short Message Service"]' でフィルタリングすると、結果は SMS に制限されます。aggregateBy に "COUNTRY_NAME" を追加すると、国ごとに分類されます。
aggregateBy には少なくとも 1 つのディメンションが必要です。2 つのペアには、ペアからいずれかのバリアントを指定しない場合、デフォルトが自動追加されます。
| 送信すると... | 結果には以下が含まれます... |
|---|---|
| '["日"]' | ACCOUNT_NAME, CATEGORY_CODE, DAY |
| '["ACCOUNT_KEY", "日"]' | CATEGORY_CODE、ACCOUNT_KEY、「日」 |
| '["ACCOUNT_NAME", "CATEGORY_NAME", "日"]' | ACCOUNT_NAME、CATEGORY_NAME、「日」 |
| '["ACCOUNT_KEY", "CATEGORY_NAME", "日"]' | ACCOUNT_KEY, CATEGORY_NAME, DAY |
デフォルトの自動追加ディメンション:
- ACCOUNT_NAME:
ACCOUNT_NAMEもACCOUNT_KEYも指定されていない場合は自動追加されます。 - CATEGORY_CODE:
CATEGORY_CODEもCATEGORY_NAMEも指定されていない場合は自動追加されます。
一方のバリアントを指定すると、もう一方のバリアントが抑制されます。両方を明示的に含めない限り、両方が同時に追加されることはありません。
追加のディメンションには、時間 (DAY、MONTH)、地域 (COUNTRY_NAME、NETWORK_NAME)、送信者、キャンペーン、マルチテナント コンテキスト (APPLICATION_ID、ENTITY_ID) が含まれます。キャンペーンとテンプレートのディメンションは、ID のみを返します。名前は請求データに含まれません。
aggregateBy 列挙値とその定義の完全なリストについては、請求データ リファレンスの Dimensions を参照してください。
応答データ
結果はJSONとしてコールバックURLに配信されます。応答には次のものが含まれます。
| フィールド | 説明 |
|---|---|
requestId | クエリを送信したときに返された ID と一致します |
| 'ステータス' | SUCCESSまたはFAILED |
response.requestedPeriod | クエリで使用される時間範囲。粒度の調整またはファイナライズのトリミングにより、要求された範囲と異なる場合があります。 |
response.totalRows | 返されるデータ行の合計数 |
| '応答.列' | 各列を記述する配列: columnName (ディメンションまたはコスト フィールド コード) と columnDataType (STRING, INTEGER, NUMBER, BOOLEAN, DATE_TIME) |
response.rows | データ行の配列。各行には、columns 配列と同じ順序の値が含まれています。N/A は、フィールドがその行の組み合わせに適用されないことを示します。 |
| '失敗メッセージ' | ステータスがFAILEDの場合に存在します。 |
metadata.clientRequestedPeriod | sentSince と sentUntil は、送信したとおりの値です。response.requestedPeriodと比較して、範囲が調整されたかどうかを確認します。 |
metadata.billingPeriods | クエリ内の各請求期間の確定ステータスは、month (yyyy-MM 形式) と volumeFinalized として指定されます。volumeFinalized が true の場合、その月のユニット数は完了し、それ以上のボリュームの変更は予想されません。請求書が発行されるまで価格は変更される可能性があるため、請求書と照合して最終金額を必ず確認してください。 |
原価フィールドの定義と通貨形式については、原価フィールドを参照してください。
アカウント階層と可視性
デフォルトでは、Billing Usage API は、アカウント階層全体 (自分のアカウント、関連するサブアカウント、会社の下のすべてのアカウント) のデータを返します。これは請求構造を反映しています。
サブアカウントでログインすると、自分のアカウントデータのみが表示されます。結果を特定のアカウントに絞り込むには、accountKeysフィルタパラメータを使用します。
トラブルシューティング
| 問題点 | ソリューション |
|---|---|
| コールバックURLが結果を受信していない | コールバック URL がパブリックにアクセス可能であることを確認します (localhost は機能しません)。受信要求をブロックする可能性のあるファイアウォール規則を確認します。最初の応答で返された requestId をチェックして、要求が受け入れられたことを確認します。 |
| 401 不正エラー | APIキーにbilling:usage:viewスコープがあることを確認します。「 API 認証 を参照してください。 |
| 検証エラー | dateInterval と少なくとも 1 つの aggregateBy ディメンションが含まれていることを確認します。日付範囲が 3 か月を超えないことを確認します。 |
| Billing Usage APIにアクセスできない | APIキーにbilling:usage:viewスコープがあることを確認します。スコープが正しい場合、アカウントはレガシー設定を使用できますが、これは要求に応じて有効にできない構造上の制限です。アカウントマネージャーに問い合わせて確認してください。 |