OpenRouter 第一個請求練習 — Mason AI Lab — 2026-09-21
教學：https://masonailab.com/tools/openrouter-api-guide-2026/

需要 Node.js 22 或更新版，不需要安裝 npm 套件。

先跑離線測試（不讀取 .env、不連線、不呼叫模型）：
  node --test request.test.mjs
測試回應、模型名稱與 token 數全部是虛構 fixtures，不是模型實測結果。

自行連線：
1. 在電腦建立一個新的私人資料夾，解壓本包；不要放進網站 public 或公開 repo。
2. 到 OpenRouter Keys 建立有 credit limit 的測試 key。
3. 在同資料夾建立 .env 純文字檔，只有一行：
   OPENROUTER_API_KEY=YOUR_KEY_HERE
   將 YOUR_KEY_HERE 改成自己的 key。不要分享、提交或重新打包 .env。
4. 在該資料夾開啟終端機，執行：
   node --env-file=.env request.mjs
   若系統原有 OPENROUTER_API_KEY 環境變數，它會優先於 .env；請確認使用正確的測試 key。
5. 成功時核對 ok、model、content 與 usage；usage 為 null 表示沒有回傳，不代表用量為零。

程式只向 OpenRouter Chat Completions 送一次固定、不含私密資料的訊息。
使用 openrouter/free、stream:false、max_tokens:128，30 秒逾時，不自動重試或改用付費模型。
max_tokens 是輸出 token 限制，不是帳戶金額上限。免費模型也可能受帳戶、容量及資料政策限制。
小 token 預算可能讓推理模型耗盡預算而沒有可見答案；empty_content 或 incomplete_output 不算成功。
本包已做離線程式測試，沒有使用真實 key 或取得線上模型回答；連線品質與 provider 可用性須自行驗收。

錯誤對照：
missing_key：未填 key 或仍是佔位文字，程式尚未連線。
401：key 無效或已停用，檢查 .env 與 Key 設定。
402：查看 limitSource；openrouter_key_limit 為 key 上限、openrouter_credits 為 credits／單次預算、
     openrouter_in_flight_budget 為同時執行／近期結算預算，可參考 retryAfter 等候。
403：權限、內容或 guardrail 限制；依核准規則檢查，不自動放寬。
429：請求受限；有 retryAfter 時依指示等待，勿連續重送。
503：目前沒有符合路由條件的供應端；檢查可用性與設定。
api_error：也可能出現在 HTTP 200 的 JSON 裡，不能只看 HTTP 狀態。
invalid_json／network_error／timeout：檢查連線及服務狀態，程式不會自動重送。

官方參考：
https://openrouter.ai/docs/api_reference/authentication
https://openrouter.ai/docs/api_reference/errors-and-debugging
https://openrouter.ai/docs/api_reference/limits
https://openrouter.ai/docs/cookbook/get-started/free-models-router-playground
