交易與花費
每一筆進出組織的餘額,都會寫進一本僅能附加的帳本。計費 頁面用兩種方式呈現它:一張圖表看出你花錢的形狀,一張表格列出背後的確切記錄。
交易清單
表格由新到舊排列,一次顯示 50 筆;載入更多 會取得下一頁。
| 欄位 | 內容 |
|---|---|
| 日期 | 這筆記錄寫入的時間,精確到秒 |
| 類型 | 這是哪一種記錄 |
| 明細 | 這筆記錄所屬的執行個體,以及它涵蓋了幾秒 |
| 金額 | 餘額的帶正負號變化量,儲值為正 |
| 餘額 | 這筆記錄之後的餘額 |
你會看到的類型:
| 類型 | 主控台標籤 | 由什麼產生 |
|---|---|---|
topup | 餘額已入帳 | 一筆確認完成的 Stripe 付款 |
charge_gpu | GPU 用量 | 一次執行時間的結算 |
charge_storage | 儲存 | 一次停止中硬碟時間的結算 |
adjustment | 調整 | 任何一筆既不是儲值、也不是計量用量的帶正負號餘額變動——多半是 Stripe 的追回,而且是自動入帳的。見下文 |
adjustment 不只是人工修正。Stripe 事件會自行產生它們,而該列的 meta.reason 會說明是哪一種:
meta.reason | 正負 | 發生了什麼 |
|---|---|---|
refund | 扣款 | 一筆付款被退款。只會扣掉這一次事件所移動的金額,所以第二次部分退款不會把第一次的再扣一遍 |
dispute_opened | 扣款 | 有人提出了退單,而那筆錢已經沒了 |
dispute_funds_withdrawn | 扣款 | 一筆先以查詢形式進來的爭議把款項抽走了,所以它剛開啟時並沒有扣款 |
dispute_won | 入帳 | 你贏了這筆爭議,扣款被沖回 |
爭議開啟期間也會凍結該組織:POST /v1/instances 與啟動一個已停止的執行個體都會回 402 PAYMENTS_FROZEN,所以一筆退單沒辦法拿去支付 GPU 時間。爭議結案就會解除凍結,不論結果為何——輸掉的話那筆扣款留著,之後就由餘額決定你能做什麼——但前提是這個組織身上沒有其他還開著的爭議。而一筆查詢,也就是發卡機構在問問題、還沒有任何錢移動的情況,會凍結帳號但完全不產生任何帳本記錄:為了一個常常不了了之的問題就扣款,等於是從一個什麼都沒做錯的人身上拿走額度。
明細 欄位會連到該執行個體的 計費 分頁。儲值與調整沒有對應的執行個體,會顯示一個破折號。
由於結算大約每分鐘跑一次,單一個執行個體每小時就會產生大約 60 列,一天大約 1,440 列。這份清單是設計來抽樣和篩選的,不是設計來從頭讀到尾的 — 要看單一執行個體的總額,請開啟該執行個體並查看 已結算花費;要看每日總額,請用圖表。不到一分錢的金額會顯示到小數點後四位,所以一分鐘的儲存費用讀起來會像 $0.0007,而不是 $0.00。
花費圖表
花費 — 過去 30 天 每天畫一個點,標題旁邊是 30 天的總額。把游標停在某個點上會顯示那天的數字。
這張圖表算的是什麼:
- 只算 GPU 費用與儲存費用。儲值與調整不列入 — 這是花費,不是現金流。
- 日期以 UTC 分桶,所以在 UTC 以西的地方跑到深夜的工作,會落在隔一天的點上。
- 沒有費用的日子畫成零,而不是跳過,這也是圖表在幾波工作之間出現平坦區段的原因。
這些端點
兩個端點讀的都是目前組織的帳本。請送出 bearer token — 已登入的工作階段或 shk_ 組織 API 金鑰都可以。用工作階段時,由 X-Org-Id 決定組織,沒有這個標頭時則使用個人組織;API 金鑰被綁定在自己的組織上,為其他任何組織送出 X-Org-Id 都會被拒絕並回傳 ORG_MISMATCH。兩個端點都不需要管理員權限,所以成員或 API 金鑰都讀得到。請參閱 驗證。
GET /v1/billing/transactions
curl "$SUPERHEAT_API/v1/billing/transactions?limit=100" \
-H "Authorization: Bearer $SUPERHEAT_TOKEN" \
-H "X-Org-Id: $ORG_ID"
| 參數 | 範圍 | 預設值 | 作用 |
|---|---|---|---|
limit | 1 到 200 | 50 | 每頁筆數 |
cursor | 一筆記錄的 id | — | 回傳比這個 id 更舊的記錄 |
instance_id | 一個執行個體 id | — | 把這一頁限制在單一執行個體 |
記錄由新到舊放在 items 中回傳,旁邊還有一個 next_cursor。把那個值當作 cursor 傳入就能取得下一頁;當它回傳 null 時,代表你已經讀到帳本的盡頭。
每筆記錄帶有它的 id(同時充當分頁游標)、它的 type、它所屬的 instance_id(儲值或調整則為 null)、一個 created_at 時間戳記、它的帶正負號金額,以及這筆記錄產生後的餘額。計量類的費用還會帶一個 meta 物件,記下計費期間的起訖時間與它涵蓋的秒數;調整則會帶上面那張表裡的 meta.reason。
要拉出單一執行個體的費用:
curl "$SUPERHEAT_API/v1/billing/transactions?instance_id=$INSTANCE_ID&limit=200" \
-H "Authorization: Bearer $SUPERHEAT_TOKEN" \
-H "X-Org-Id: $ORG_ID"
GET /v1/billing/spend-daily
curl "$SUPERHEAT_API/v1/billing/spend-daily?days=90" \
-H "Authorization: Bearer $SUPERHEAT_TOKEN" \
-H "X-Org-Id: $ORG_ID"
| 參數 | 範圍 | 預設值 | 作用 |
|---|---|---|---|
days | 1 到 90 | 30 | 往回彙總多久 |
這就是圖表的資料來源:GPU 與儲存費用依 UTC 日期分組,由舊到新,每筆記錄帶有一個 date 與那天的總額。只有有費用的日子才會出現,所以安靜的一週不會產生任何記錄,而不是一連串的零 — 如果你要畫連續的序列,缺口要自己補。