Anthropic API キーを支出閾値超過で無効化する
このチュートリアルでは、CloudFlow Datastore に保存された API キーごとの USD 閾値を超えてひも付けられた支出が発生した場合に、Anthropic の API キーを非アクティブ化するフローの構築方法を説明します。その過程で、Anthropic の Cost と Usage アクションを、Date/time transform、Datastore、Code、Notification ノードと組み合わせる方法を学びます。
Anthropic Admin API アクションは Early preview で提供されています。アクセスをリクエストするには、サポートリクエストを送信してください。
Goal and objectives
-
Goal: Datastore からキーごとの支出閾値を読み込み、共通のローリング・ルックバックウィンドウで支出を計測し、閾値を超えたキーを非アクティブ化し、通知メールを送信し、強制適用イベントを記録するワークフローを作成すること。
-
Objectives: このチュートリアルでは、次のことを学びます。
-
date/time transform ノードを使用して、UTC の日単位にそろえたレポートウィンドウを構築する。
-
設定可能な閾値を Datastore に保存し、有効な行のみを読み込む。
-
同じフローから Anthropic の Cost と Usage の Admin API アクションを呼び出す。
-
Code ノードを使用して、組織の USD 支出をトークンシェアに基づいて API キーにアトリビュートする。
-
updateApiKeyでキーを非アクティブ化し、参照フィールドを使用して受信者へ通知する。
-
次に、構築するフロー全体を示します。

How the spend check works
Anthropic の Cost API は組織の支出を USD で返しますが、結果を api_key_id ごとにグループ化することはできません。Messages Usage API は API キーごとのグループ化が可能ですが、ドルではなくトークン数を返します。
そのため、このフローでは次のように処理します。
-
ルックバックウィンドウの組織コストを読み取る。
-
同じウィンドウで、
api_key_idごとにグループ化された Messages usage を読み取る。 -
組織全体の USD を、各キーのトークンシェアに比例して各キーにアトリ ビュートする。
-
各有効な Datastore の閾値を、そのアトリビュートされた金額と比較する。
Daily Cost の grupo では、UTC の真夜中の境界も必要です。午後のタイムスタンプは空の範囲にスナップして Cost リクエストが失敗する可能性があるため、date/time ノードは日付の開始に切り詰めます。
Before you begin
-
API キーの一覧表示と更新、およびコストと使用状況レポートの読み取りが可能な Admin API キーを使用して、Anthropic Admin API connection を作成します。
-
CloudFlow Datastore で、次の 2 つのテーブルを作成します。
-
Anthropic API Key Spend Thresholds フィールド:
-
apiKeyId(text, unique) -
apiKeyName(text) -
thresholdUsd(numeric) -
notifyEmail(text) -
enabled(boolean)
-
-
Anthropic API Key Spend Enforcement Events フィールド:
-
eventKey(text, unique) -
apiKeyId,apiKeyName,notifyEmail,action(text) -
spendUsd,thresholdUsd(numeric) -
lookbackDays(integer) -
periodStart,periodEnd,enforcedAt(timestamp)
-
-
-
少なくとも 1 行の閾値レコードを追加します 。強制適用する準備が整うまでは
enabledをfalseのままにし、apiKeyIdは Claude Console またはlistApiKeysアクションから取得した実際の Anthropic API キー ID に置き換えてください。
Start building
-
DoiT コンソール にサインインし、上部ナビゲーションのメガメニューから Automation and operations を選択し、CloudFlow を選択します。
-
Create CloudFlow を選択します。
Step 1: Add a trigger
What should start your flow ブロックで Manually start を選択します。後で custom schedule に切り替えて(たとえば毎日チェックを実行するなど)、スケジュール実行にすることもできますが、構築とテストの間は手動トリガーの方が簡単です。
Step 2: Build the rolling spend window
bucket_width=1d を指定した Anthropic Cost レポートでは、UTC の真夜中の境界が必要です。手動トリガーの startTime フィールドに対して date/time transform を設定します。
-
Date/time transform ノードを追加し、名前を
Build rolling spend windowにします。 -
変換するフィールドとして
1. Manually start.startTimeを選択します。 -
次の変換を順番に追加します。
-
Truncate を Day に設定し、新しいフィールドを
periodEndにします。 -
periodEndを ISO 8601 として Format し、新しいフィールドをperiodEndIsoにします。 -
1. Manually start.startTimeを再度 Day に Truncate し、新しいフィールドをdayStartにします。 -
dayStartから Subtract で Days を1日差し引き、新しいフィールドをperiodStartにします。共通のルックバック期間を広げる場合は、後でこの減算値を変更します。 -
periodStartを ISO 8601 として Format し、新しいフィールドをperiodStartIsoにします。

-
減算値が 1 の場合、このウィンドウは昨日の 00:00 UTC から今日の 00:00 UTC まで、1 つの完全な Daily Cost grupo となります。Anthropic の日次集計の動作に合わせて、未完了の本日分は含まれません。
同じノードを参照する date/time ステップでは、直前のステップで作成した新しいフィールドのみを使用できます。periodEnd を文字列にフォーマットした後は、減算する前にトリガーの startTime をもう一度切り詰めてください。
Step 3: Load enabled thresholds
-
Datastore ノードを追加し、名前を
Load API key thresholdsにします。 -
Anthropic API Key Spend Thresholds テーブルを選択します。
-
Action を Get に設定します。
-
フィルターを追加します:
enabled == true。
閾値を Datastore に保持しておくことで、フロー自体を編集することなく、リミットや通知先、強制適用対象のキーを変更できます。
Step 4: Read organization costs
-
Anthropic の Perform an action ノードを追加し、名前を
Read Anthropic org costsにします。 -
Cost サービスから
getCostReportアクションを選択します。 -
Connection タブで、Anthropic Admin API connection を選択します。
-
Parameters タブで、次のように設定します。
-
Starting_at:
2. Build rolling spend window.periodStartIso -
Ending_at:
2. Build rolling spend window.periodEndIso -
Bucket_width:
1d -
Limit:
31
group_by[]=api_key_idは追加しないでください。Cost API はこのディメンションを受け付けません。
-
コスト金額は、最小通貨単位の 10 進数文字列として返されます。USD の場合は、100 で割ってドルに変換します。
Step 5: Read usage by API key
-
もう 1 つ Anthropic のアクションノードを追加し、名前を
Read Anthropic API key usageにします。 -
Usage サービスから
getMessagesUsageReportアクションを選択します。 -
同じ connection と
periodStartIso/periodEndIsoの参照を使用します。 -
Bucket_width を
1d、Limit を31に設定します。 -
Add additional parameters を選択し、group_by[] を選択して、値を
api_key_idに設定します。
Step 6: Find keys over threshold
標準ノードで閾値の読み込みと Anthropic の呼び出しはできますが、日次 grupo の合計、セントから USD への変換、トークンシェアに基づく支出のアトリビュート、閾値超過キーごとの違反レコード出力を行うには、code node を使うのが最もわかりやすい方法です。
-
Code ノードを追加し、名前を
Find keys over thresholdにします。 -
eventKey,apiKeyId,apiKeyName,spendUsd,thresholdUsd,lookbackDays,periodStart,periodEnd,notifyEmail,action,enforcedAtなどのフィールドを持つオブジェクトの配列用に、Advanced schema を使用します。 -
コードエディタで、Cost 金額を組織全体の USD に集約し、Usage のトークン数を
api_key_idごとに合計し、トークンシェアに基づいて支出をアトリビュートし、アトリビュートされた支出がthresholdUsdに達しているか、または上回っているキーのみを返します。比較ロジックは次のようになります。
const keyTokens = tokensByKey.get(apiKeyId) ?? 0;const spendUsd =totalTokens > 0? Number(((orgSpendUsd * keyTokens) / totalTokens).toFixed(6)): 0;if (spendUsd < thresholdUsd) continue;
プレースホルダー行や無効化された閾値はスキップし、ドラフトの Datastore シードによって誤ったキーが非アクティブ化されないようにします。
Step 7: Deactivate over-limit keys
-
Anthropic のアクションノードを追加し、名前を
Deactivate Anthropic API keyにします。 -
Api Keys サービスから
updateApiKeyを選択します。 -
api_key_id を
6. Find keys over threshold.message.apiKeyIdに、status をinactiveに設定します。
CloudFlow は、Code ノードが返した違反レコード 1 件ごとに、このアクションを 1 回実行します。