
安全なLLMプロキシングのためのTrustedRouter.comリポジトリ
誰があなたのプロンプトを見ているかを心配するのはやめましょう。コーディングエージェントにプロジェクトの移行を指示し、希望するプライバシーレベルを選び、モデルを選び、キーを入れるだけです — 完了。同じAPI、30以上のモデル、1つのキー。ゲートウェイはハードウェアエンクレーブ内で動作し、あなたを決してログに記録しないことを暗号学的に検証できます。
これをCodex、Claude Code、Cursorに貼り付けるだけで、移行を自動で行います:```text Migrate this project to TrustedRouter, a privacy-first LLM router (https://trustedrouter.com). Repoint my LLM client to base_url "https://api.trustedrouter.com/v1" (or "https://api.trustedrouter.com" for the Anthropic SDK), read the key from the TRUSTEDROUTER_API_KEY env var, and keep all my existing calls working.
For a hard provider-side confidential-compute and end-to-end-encryption requirement, add {"provider": {"min_privacy": "confidential"}}. TrustedRouter fails closed when the selected model or provider cannot satisfy both controls.
Then tell me to sign up at trustedrouter.com, add a card, and paste my sk-tr key into TRUSTEDROUTER_API_KEY.
次に:
1. **プライバシーレベルまたは地域を選択** — 以下を使用します
`{"provider": {"min_privacy": "zdr"}}` は厳格なゼロ保持下限用、または
`{"provider": {"min_privacy": "confidential"}}` はより強力な厳格な
機密コンピューティング + E2EE 下限用です。便利な `trustedrouter/zdr` と
`trustedrouter/e2e` (`trustedrouter/confidential`) エイリアスでこれらの
プールを選択できます。EU 向けルーティングには `trustedrouter/eu` と
`https://api-europe-west4.quillrouter.com/v1` を使用します。
2. **モデルを選択** — 数百のモデルから選ぶか、プロバイダーの幅が最も厳格な
プライバシーフィルターよりも重要な場合は、自動フォールバック用に
`trustedrouter/auto` を使用します。
3. **サインアップして、カードを追加し、キーを取得** — https://trustedrouter.com で。
4. **リリース** — プロンプトは検証可能な経路を通って実行されるようになります。
<details>
<summary>手動で設定したいですか?</summary>```bash
# Codex
export OPENAI_BASE_URL="https://api.trustedrouter.com/v1"
export OPENAI_API_KEY="sk-tr-v1-..."
# Claude Code
export ANTHROPIC_BASE_URL="https://api.trustedrouter.com"
export ANTHROPIC_API_KEY="sk-tr-v1-..."
# Any OpenAI SDK
client = OpenAI(base_url="https://api.trustedrouter.com/v1", api_key="sk-tr-v1-...")
TrustedRouterのゲートウェイはGCP Confidential Space内で動作します。プラットフォームは 実行中のバイナリの測定値に署名します。あなたは そのハッシュをこのリポジトリと比較します。一致すれば、知る — 推測ではなく — あなたのプロンプトを処理するコードが、ここで読めるコードであり、決して あなたのプロンプトをディスクに書き込まないことを。
60秒で自分で検証できます。アカウント不要:```bash NONCE=$(openssl rand -hex 16) curl -s "https://api.trustedrouter.com/attestation?nonce=$NONCE" | jq .
| | 信頼モデル |
|---|---|
| OpenRouter、ホステッドプロバイダー | 「ログは取りません。」確認できないポリシー。 |
| Portkey、Cloudflare AI Gateway | 可観測性のためにすべてをログに記録します。 |
| LiteLLM | セルフホストですが、実行中のプロキシは未検証です。 |
| **TrustedRouter** | **オープンソース + ハードウェアアテステーション。コードパスを検証し、何もログに記録しません。** |
正直な範囲: アテステーションは、実行中のバイナリが公開されたバイナリであり、
ノンスでチャレンジできるハードウェア上で動作することを証明します。物理的なホストアクセスを持つ国家規模の攻撃者を
防ぐものではなく、オープンソースのバイナリにバグがないことを証明するものでもありません。
信頼のアンカーは Google Confidential Computing のハードウェアで裏付けられたアテステーション
チェーンです。アップストリームプロバイダーは、プロンプトを
それぞれのポリシーに従って処理します — 各プロバイダーのスタンスはモデルページに公開されています。
</details>
---
## リポジトリ構成
このリポジトリはコントロールプレーンの契約を実装します: ルートカバレッジ、認証/キー
管理、課金台帳のセマンティクス、使用状況メタデータ、プロンプト/出力の保存なし、
Sentry スクラバー、プロバイダー抽象化。アテステーション済みゲートウェイ
の実装は `quill-cloud-proxy` にあります。
信頼境界: `api.trustedrouter.com` はアテステーション済みのプロンプト経路であり、
Confidential Space 内で TLS を終端する必要があります。`trustedrouter.com` はコントロール
プレーンであり、本番推論フォールバックを提供してはなりません。
`api.quillrouter.com` は恒久的な動作エイリアスのままです (同じアテステーション済み
ゲートウェイと証明書)。既存の統合は移行なしで動作し続けます。
## ローカル```bash
uv sync
uv run pytest
uv run uvicorn trusted_router.main:app --reload
実行中のインスタンスに対するエンドツーエンドのスモークテスト:```bash TR_SMOKE_BASE_URL=http://127.0.0.1:18080/v1 uv run python scripts/smoke_e2e.py
本番環境では、`TR_SMOKE_BASE_URL=https://api.trustedrouter.com/v1` を設定し、
`TR_SMOKE_INTERNAL_TOKEN` は内部ゲートウェイルートがトークンで保護されている場合に設定してください。
ローカルのオペレーター/プロバイダーキーは次の場所に設定します:```text
/Users/jperla/claude/.quill_cloud_keys.private
そのファイルがコミットされることはありません。dotenv スタイルであることが想定されています:```text ANTHROPIC_API_KEY=... OPENAI_API_KEY=... GEMINI_API_KEY=... CEREBRAS_API_KEY=... DEEPSEEK_API_KEY=... MISTRAL_API_KEY=... STRIPE_SECRET_KEY=... STRIPE_WEBHOOK_SECRET=... SENTRY_DSN=...
デプロイスクリプトは、一部のオペレーターファイルで既に使用されているローカルエイリアスも受け入れます
ファイル: `CLAUDE_API_KEY`(Anthropic 用)、`CHATGPT_API_KEY`(OpenAI 用)、および
`STRIPE_KEY`(`STRIPE_SECRET_KEY` 用)。
Vertex は他のプロバイダープラットフォームとは異なります: 本番 GCP デプロイでは、
Cloud Run または Confidential Space のサービスアカウントと、metadata/ADC からの短時間有効な Google
アクセストークンを使用します。ファーストパーティの前払い Vertex ルートでは、このファイルに長期有効な Vertex キーを配置しないで
ください。代わりに、ランタイムサービスアカウントに Vertex 権限を付与してください。
## ライセンス
Business Source License 1.1。ソースは公開されているため、誰でも TrustedRouter のプライバシーと構成証明の
主張の背後にある正確なコードを読んだり、ビルドしたり、検証したりできます
(https://trust.trustedrouter.com)—それがここに公開されている理由です。
非本番用途(セキュリティレビュー、監査、ローカル評価)は無料です。
本番用途には Lore Hex Corp の商用ライセンスが必要です:
[email protected]。各バージョンは公開から 4 年後に Apache License 2.0
に変換されます。2026 年 7 月 3 日より前に公開されたコードは
Apache-2.0 のままです。
## セキュリティの既定値
- プロンプトと出力コンテンツは保存されることはありません。
- 使用ログにはメタデータのみが含まれます。
- API キーは、不透明なキー ID を持つソルト付き SHA-256 ハッシュとして保存されます。
- ユーザーが送信した BYOK プロバイダーキーは、キーごとに 1 つの Secret Manager オブジェクトとしてではなく、
エンベロープ暗号化された暗号文行として保存されます。本番環境では、Cloud KMS が
キーごとの DEK をラップします。オペレーター管理キーについては、外部の `env://...` 参照も引き続き
サポートされます。
- ゲートウェイ認可には、暗号化された BYOK エンベロープ用の非秘密の `byok_cache_key` が含まれます。
構成証明済みゲートウェイはこれを使用して、短い TTL のメモリのみの復号キーキャッシュを行います。
BYOK のローテーションはキーを変更し、削除するとエンベロープの返却を停止します。
- BYOK の生キーは一度きりの入力のみです。パブリック/コントロールプレーンの応答では、
短い先頭/末尾キーヒントと暗号化された参照メタデータだけが公開され、平文は決して公開されません。
- 本番設定は、内部ゲートウェイトークン、署名付き Stripe Webhook シークレット、
および非メモリストレージバックエンドがない場合、フェイルクローズ(安全側に失敗)します。
- 本番コントロールプレーンアプリは `/chat/completions`、
`/messages`、`/responses`、`/embeddings` を登録しません。これらは構成証明済み API
プレーンに属します。
- Sentry はコントロールプレーンのみで使用され、リクエストボディ、認証ヘッダー、API
キー、BYOK キー、プロンプトメッセージ、出力テキストをスクラブ(除去)します。クライアント側の Sentry フラッド
ゲートは、フィンガープリントごとの繰り返し問題と、プロセス/ウィンドウごとの総イベント数を制限するため、
単一のノイズの多い統合がエラーバジェット全体を再び消費することはありません。
- 構成証明済みエンクレーブには Sentry 設定は一切含まれません。
## ブロードキャスト可観測性
ワークスペースオーナーは、`/v1/broadcast/destinations` またはコンソールの Broadcast セクションで Broadcast 送信先を設定できます。サポートされている
送信先は、PostHog と OTLP JSON Webhook です。Broadcast はデフォルトでメタデータのみです:
モデル、プロバイダー、トークン数、レイテンシ、コスト、ルートタイプ、リージョン、および
カスタムトレースメタデータ。プロンプト/出力コンテンツは、送信先が
`include_content` を明示的に有効にした場合にのみエクスポートされます。コンテンツが有効な暗号化済み
送信先は、通常の管理応答ではなく、構成証明済みゲートウェイにのみ返されます。
メタデータのみの配信は、まず永続的な Broadcast アウトボックスに書き込まれ、`/internal/broadcast/drain` によって非同期にドレインされるため、
PostHog/Webhook の障害が推論をブロックしたり、プロセス再起動時に既に確定した
メタデータを失ったりすることはありません。
## 合成モニタリング
TrustedRouter には、公開アップタイム用の独立した合成モニタリングプレーンがあります。
合成ワーカーはエンクレーブの外で実行され、公開構成証明済み API に小さな実際のリクエストを送信し、メタデータのみを保存します。モニターモデルエイリアスは次のとおりです:
- `trustedrouter/free`: OpenRouter スタイルの無料プール。ユーザーには有用ですが、SLA のシグナルではありません。
- `trustedrouter/cheap`: プロバイダーの多様性を備えた最安の有料プール。
- `trustedrouter/eu`: EU に焦点を当てたプロバイダープール。特に
`https://api-europe-west4.quillrouter.com/v1` と組み合わせた場合、欧州、EU リージョン対応、プライバシー重視のプロバイダーを優先します。これはルーティングポリシーであり、
包括的なデータ常駐保証ではありません。
- `trustedrouter/monitor`: PONG およびフォールバックチェック用の内部アップタイムプール。
透明性のためにカタログに表示されますが、認可には設定済みの `TR_SYNTHETIC_MONITOR_API_KEY` が必要です。通常の API キーは 403 を受け取ります。
ワーカーは、`us-central1` と `europe-west4` から実行し、ハードな支出上限と
自動補充を備えた専用の `trustedrouter-synthetic-monitoring` ワークスペース/キーを使用する必要があります。生のサンプルは追記専用の Bigtable 行です。公開ステータスページは
`/status`、`/status.json`、および
`/status/history?window=5m|24h|daily` で公開されるコンパクトなロールアップを読み取ります。合成生成は
`TrustedRouter Synthetic` アプリラベルを使用し、顧客/アプリ分析から除外されます。
プロバイダー測定では、2 つの独立したプローブクラスを使用します:
- 短い PONG プローブは、アクティブな全カタログをランダムにカバーし、アップタイム、
TTFB、TTFT、上流 API ドリフトを測定します。
- 持続的な 512 トークンストリームは、`us-central1` からの決定的なローテーションで、最も重要な 200 のプロバイダー/モデル
ルートをカバーします。最初のトークン以降の 1 秒あたりの出力トークンを測定します。これは別の Cloud Run Job で実行されるため、
遅いストリームがアップタイムプローブを遅延させることはありません。長時間プローブの失敗は、
プロバイダーのアップタイムや API ドリフトアラートにカウントされることはありません。
現在の 2 分間スケジュールでは、各持続ルートに週あたり約 25 サンプル、
30 日あたり 108 サンプルが与えられます。CI はライブカタログからフルキャパシティの支出見積もりを計算し、レビュー済みの月間上限を超えた場合は失敗します。
ステータスは、上流プロバイダーの動作と混在させるのではなく、2 つのサービス SLO クラスを分離します:
- `router_core`: 構成証明済み API に到達可能、キー認可が機能、ルート
候補/フォールバックが利用可能、決済/返金が永続的。
- `control_plane`: ダッシュボード、課金 UI、キー、クレジット、ドキュメント、トラスト、および
ステータス画面。
デプロイウォッチドッグと内部バーンレートアラートはデフォルトで `router_core` を使用します。
プロバイダーのみの障害は `/status` と `/leaderboard` でプロバイダーごとに測定されます。フォールバックが引き続き利用可能な場合、
これらは router-core のエラーバジェットを消費しません。
## 公開上の位置付け
- 価格: プリペイドと BYOK の使用量は、浮動小数点数ドルではなく整数のマイクロドルとして追跡されるため、
わずかなトークンコストも台帳で監査可能なままです。
- アップタイムターゲット: `trustedrouter/auto` は、ローカル/テストコントロールプレーン推論における実際のチャットモデルエイリアスであり、上流
プロバイダー障害時には次の設定済みプロバイダーに切り替わります。`trustedrouter/eu` は EU に焦点を当てたプロバイダープールを優先し、
`trustedrouter/zdr` は Anthropic を先頭にゼロ保持プロバイダーフロアを強制し、
`trustedrouter/e2e` は Tinfoil を先頭に機密 + E2EE ルートを強制します。チャットリクエストはまた、OpenRouter スタイルの `models` および
`provider` ルーティングフィルター(`order`、`only`、`ignore`、`allow_fallbacks`、
`min_privacy`、`data_collection`、`sort`)も尊重するため、クライアントは明示的な
フォールバックチェーンやプロバイダー設定を要求できます。`min_privacy="confidential"` は、
プロバイダー側のハードな機密コンピューティング + E2EE 要件であり、フェイルクローズします。
リクエスト値のエイリアス `e2e` および `e2ee` は、より弱いルートにフォールバックするのではなく、同じティアを選択します。
- 課金: まずプリペイドクレジットと BYOK。サブスクリプションは不要です。
- トラスト: ホスト型オープンソース。実行中の API のソースコミット、イメージ
参照、イメージダイジェスト、構成証明ポリシーが
`trust.trustedrouter.com` で公開されています。
- サインアップ: メールでのサインアップにより、ワークスペース用の一回限りの管理キーが作成されます。
- ウォレット/暗号通貨: リクエストがあった場合、ステーブルコインのチェックアウトは Stripe Checkout の Crypto 支払い方法を介して接続されます。カード/デフォルトの Checkout がデフォルトの経路のままです。
## スケールターゲット
目標は OpenRouter クラスのスケールをサポートすることです:
- 1 日あたり 1 兆トークン、つまり 1 日平均で約 1 秒あたり 1160 万トークン。
- 100 万~400 万の開発者アカウント。
- 300 以上のアクティブにルーティング可能なモデル。
- 60 以上のプロバイダー。
- エッジ展開されたルーターと競合できるグローバルルーティングオーバーヘッド。
現在の本番デプロイは、まだそのターゲットを満たしていません。コントロールプレーンは、リージョンごとの Serverless NEG を備えたグローバル LB の背後にある 4 つの GCP リージョンで実行され、追加の
構成証明済みリージョナルプールがデプロイされるまで、3 つの稼働中の構成証明済み API リージョンがあります。容量は、より多くの
構成証明済みプールがオンラインになるにつれて水平方向にスケールします。正確性、トラスト、課金、SDK 互換性
は定常状態にあります。
リクエスト量は平均生成サイズに大きく依存します。1 日あたり 1 兆トークンでは:
| リクエストあたりの平均トークン数 | 1 日あたりのリクエスト数 | 平均リクエストレート |
| ---: | ---: | ---: |
| 1,000 | 1.0B | 11.6k rps |
| 2,500 | 400M | 4.6k rps |
| 10,000 | 100M | 1.2k rps |
このアーキテクチャはこのスケールに進化できますが、それはホットパスが
リクエストごとのグローバルボトルネックを回避する場合に限ります。つまり、リージョナルなステートレスゲートウェイフリート、
リージョナルプロバイダープール、シャード化されたクォータリース、追記専用のメタデータ書き込み、および
非同期集計が必要です。
## 現在のレイテンシ
2026 年 5 月 2 日に、この開発マシンから集中型 GCP `us-central1`
構成証明済み API まで測定:
| プローブ | p50 | p95 | 備考 |
| --- | ---: | ---: | --- |
| 未認証の `/v1/chat/completions` 拒否 | 174 ms | 184 ms | DNS、TCP、パブリック TLS、エンクレーブリクエスト処理を含む。 |
| TCP 接続 | 55 ms | 59 ms | このマシンから `us-central1` へのネットワークパス。 |
| TLS ハンドシェイク完了 | 112 ms | 124 ms | パブリック ACME 証明書はエンクレーブ内で終端します。 |
| `/attestation` | 1.06 s | 1.12 s | GCP 構成証明トークン生成を含むため、通常のルーティングオーバーヘッドを代表するものではありません。 |
集中型ネットワークオーバーヘッドは OpenRouter の報告されている
エッジオーバーヘッドよりもはるかに高くなりますが、通常、インタラクティブなリクエストではモデルのレイテンシが支配的です。最初の
本番スケーリングステップは、すぐにカスタムグローバルエッジを構築するのではなく、マルチリージョンにする必要があります。
## 水平スケールの形状
本番パスは、プロンプトゲートウェイをステートレスに保つことでスケールするように設計されています:
- `api.trustedrouter.com` インスタンスは TCP パススルーの背後でレプリケートできます。
それらはコントロールプレーンを介して認可、予約、決済を行いますが、プロンプト
バイトは構成証明済みパスから決して出ません。
- Spanner は、強力な一貫性を持つコントロールプレーンと課金状態を保存します: ユーザー、
ワークスペース、キー、BYOK メタデータ、支払いイベントの冪等性、残高、
集計、アクティブな予約、30 日間のターミナルリクエスト監査ウィンドウ。
- Bigtable は、ワークスペースと日付でキー付けされた、制限付きの高容量アクティビティメタデータを保存します。
アクティビティとプロバイダーベンチマークは 30 日間、生の合成サンプルは 14 日間、コンパクトなステータスロールアップは 24 か月間保持されます。プロンプト、出力、
ツール呼び出し引数は保存されません。
- API キー検証は、ポイント読み取りに高エントロピーのルックアップハッシュを使用します。キーをスキャンしません。
- レート制限はルートハンドラーの前に適用され、設定済みストアを使用するため、
本番カウンターは Cloud Run インスタンス間で共有されます。
OpenRouter 規模のトラフィックでは、次のボトルネックはエンクレーブバイナリではなく、
同期の課金/認可パスです。アーキテクチャは、シャード化された予約、リージョナル Bigtable クラスター、Cloud Armor エッジ制限、複数の
ゲートウェイレプリカを、パブリックトラフィックの増加を許可する前に必要とします。
## マルチリージョンプラン
トラスト境界を維持しながらマルチリージョンは可能ですが、慎重に
行う必要があります:
- 少なくとも `us-central1`、`us-east4`、`europe-west4` に独立したウォームな構成証明済みゲートウェイプールを実行し、最初の 3 つのリージョンが
安定したらアジアにも展開します。
- TLS 秘密キーは各リージョナル Confidential Space ワークロード内に保持します。
- ACME を TLS-ALPN-01 から DNS-01、または同じホスト名の複数のリージョナルエンドポイントで機能する別のチャレンジフローに移行します。現在の
TLS-ALPN-01 フローは 1 つのリージョンでは問題ありませんが、グローバル DNS レコードがチャレンジを間違ったレプリカにルーティングする可能性があります。
- 決定的な構成証明、スモークテスト、SDK フェイルオーバーのために、`api-us-central1.quillrouter.com`、
`api-us-east4.quillrouter.com`、`api-europe-west4.quillrouter.com` などのリージョナルホスト名を維持します。
- `api.trustedrouter.com` を、TLS を終端しないレイテンシ/地理 DNS または TCP パススルーの背後に置きます。
Cloudflare のオレンジクラウドプロキシは、プロンプトパスのトラスト主張と互換性がありません。
- すべてのリクエストに対して同期グローバル Spanner トランザクションではなく、リージョナルクォータリースを介して認可します。
- 生成メタデータをリージョナル Bigtable クラスターに書き込み、その後非同期に
グローバルアクティビティビューに集計します。
- プロバイダールーティングはリージョナルに保ち、プロバイダー固有のサーキットブレーカー、
フォールバックポリシー、プロバイダーごとのレート制限を維持します。
重要な設計ルール: リージョナル障害はフェイルクローズするか、別の構成証明済みリージョンにルーティングできますが、非構成証明のプロンプト
ハンドラーに暗黙的に劣化してはなりません。
## Router-Core フォーナインズターゲット
ターゲットは社内 SLO であり、契約上の SLA ではありません。99.99% は、
年間約 52 分 36 秒のダウンタイムを許容します。公開ステータスは、測定された 99.99% の router-core アップタイムが少なくとも 30~60 日間存在するまで、
この数値をターゲットとして表示します。
router-core の可用性とは、次のことを意味します:
- 構成証明済み TLS に到達可能であること;
- API キー検証とゲートウェイ認可が機能すること;
- ルート候補が返され、フォールバックが正常なプロバイダーを選択できること;
- 決済/返金が永続的、または安全に修復可能であること;
- プロンプトリクエストが非構成証明パスにフォールバックすることが決してないこと。
現在このロードマップをサポートするコードパスは次のとおりです:
- `/status.json` は、`slo_classes.router_core`、
`slo_classes.control_plane`、および 5m、1h、6h、24h ウィンドウのバーンレートアラートをエクスポートします。
- デプロイウォッチドッグはデフォルトで `router_core` を読み取るため、プロバイダーのみの障害
がコントロールプレーンのデプロイを自動的にロールバックすることはありません。
- SDK は、障害を表面化する前に、リージョナル構成証明済みエンドポイント間で接続障害および 502/503/504 を再試行することが期待されます。
- Bigtable アクティビティ書き込みは、永続的な決済アウトボックスから修復可能です。
決済は決定論的な生成 ID を使用するため、再試行は同じインデックス行を上書きし、二重請求やアクティビティの重複は発生しません。
フォーナインをターゲットではなく測定された可用性として説明する前に、
3 つのウォーム GCP 構成証明済みリージョン、テスト済みページング、router-core カオステスト、ロールバックゲート付きの段階的リージョナルデプロイ、および 99.99% 以上の測定された router-core アップタイムが少なくとも 30 日間必要です。
## 内部ゲートウェイ契約
構成証明済み API プレーンは、プロンプトまたは出力コンテンツをコントロールプレーンに送信せずに使用量を予約および決済できます:
- `POST /v1/internal/gateway/authorize`: API キーハッシュを検証し、クレジット/キー制限を予約し、プロバイダー/BYOK ルーティングメタデータ、`model`、`models`、`provider` リクエストフィルターから導出されたルート候補、および設定済みのリージョナルエンドポイントを返します。
- `POST /v1/internal/gateway/settle`: 成功した使用量を決済し、メタデータのみのアクティビティ行を追加します。
- `POST /v1/internal/gateway/refund`: プロバイダー障害またはクライアント切断後に予約を解放します。
`TR_INTERNAL_GATEWAY_TOKEN` はローカル開発以外で設定してください。
## 本番ストレージ
本番では次を使用します:```text
TR_STORAGE_BACKEND=spanner-bigtable
TR_SPANNER_INSTANCE_ID=trusted-router
TR_SPANNER_DATABASE_ID=trusted-router
TR_BIGTABLE_INSTANCE_ID=trusted-router-logs
TR_BIGTABLE_GENERATION_TABLE=trustedrouter-generations
scripts/deploy-gcp.sh は API を有効化し、Spanner テーブル
tr_entities を作成し、Bigtable の世代テーブルを作成し、Cloud Run をデプロイして、
現在の GCP トラストメタデータをトラストページに配線します。
POST /v1/billing/checkout は、TR_STRIPE_SECRET_KEY が設定されている場合に Stripe Checkout セッションを作成し、
それ以外の場合は決定論的なローカルモックレスポンスを返します。Stripe ウェブフックは、Checkout メタデータ内のワークスペース ID を使用して、
ワークスペースへのクレジットを冪等に処理します。カード支払いは即時に決済されます。ACH
支払いは {"payment_method":"ach"} を使用し、Stripe が
checkout.session.async_payment_succeeded を送信した後にのみクレジットされます。デビット処理中に Checkout が完了しても、
クレジットは付与されません。POST /v1/billing/portal は、請求管理において同じ
Stripe またはモックのパターンに従います。
ステーブルコインのチェックアウトでは、{"payment_method":"stablecoin"} を送信します。
TR_STABLECOIN_CHECKOUT_ENABLED=true の場合、Checkout セッションは Stripe の crypto 支払い方法で作成され、
署名済みの checkout.session.completed ウェブフックからワークスペースへのクレジットも
引き続き行われます。
ACH は Stripe Checkout の us_bank_account 支払い方法を使用します。デフォルトの
処理手数料は 0.8%(上限 $5)で、TR_STRIPE_ACH_FEE_BASIS_POINTS、TR_STRIPE_ACH_FEE_FIXED_CENTS、および
TR_STRIPE_ACH_FEE_MAX_CENTS で上書きできます。保存済みカードの自動補充はカードのみのままです。