1. 快速入門
Regunow API 使用 HTTPS、Bearer 身分驗證及含版本的前綴 /api/v1。無須帳戶即可閱讀本文件。發出 API 請求需要有效的 Pro 存取權限,並同意現行政策。
- 登入 Regunow,在設定 → API 金鑰中建立金鑰。
- 請妥善保存金鑰的秘密值。它只會在建立金鑰時顯示一次。
- 設定主機和金鑰,然後透過後端或可信任的自動化程式傳送第一個問題。
# Use your Regunow host and a key from Settings → API Keys.
export REGUNOW_BASE_URL="https://YOUR_REGUNOW_HOST"
export REGUNOW_API_KEY="YOUR_API_KEY"
curl --fail-with-body \
"$REGUNOW_BASE_URL/api/v1/chat/completions" \
-H "Authorization: Bearer $REGUNOW_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: first-question-001" \
-d '{
"messages": [{
"role": "user",
"content": "Which EU product-safety obligations apply to a connected consumer device?"
}],
"mode": "jurisdiction",
"jurisdiction": "eu"
}'回答位於 output.content。回應也包含來源引用與收取的點數。此請求會消耗點數。每個新問題都應使用新的冪等鍵。
JavaScript 範例(Node.js)
// Node.js: set REGUNOW_BASE_URL and REGUNOW_API_KEY in your environment.
// Generate one key per operation; keep it unchanged when retrying that operation.
import { randomUUID } from "node:crypto";
const idempotencyKey = randomUUID();
const response = await fetch(
process.env.REGUNOW_BASE_URL + "/api/v1/chat/completions",
{
method: "POST",
headers: {
Authorization: "Bearer " + process.env.REGUNOW_API_KEY,
"Content-Type": "application/json",
"Idempotency-Key": idempotencyKey,
},
body: JSON.stringify({
messages: [{ role: "user", content: "Summarize EU product-safety obligations." }],
mode: "jurisdiction",
jurisdiction: "eu",
}),
},
);
const result = await response.json();
if (!response.ok) {
throw new Error(result.error.code + ": " + result.error.message);
}
console.log(result.output.content);2. 身分驗證
每次請求都應在 HTTP Authorization 標頭中傳送 API 金鑰。URL、Cookie 或請求主體中的金鑰不會被接受。
Authorization: Bearer rgn_live_...請將金鑰儲存在環境變數或秘密管理服務中,不要放入瀏覽器程式碼、行動應用程式套件、公開程式碼儲存庫或日誌。未啟用瀏覽器跨來源存取,請透過自己的伺服器發出請求。
已停用、刪除或過期的金鑰會立即無法驗證。Regunow 只儲存秘密值的雜湊,因此無法再次顯示既有金鑰的秘密值。需要時請建立替代金鑰。
每次請求都會檢查 Pro 權限與政策同意狀態。收到 legal_acceptance_required 時,金鑰擁有者必須登入並開啟法律條款確認。API 金鑰不能代為同意政策。
3. 模型與選項
GET/api/v1/models
查詢支援的模型、強度等級、管轄區、回答語言與功能。此端點需要驗證,但不單獨收取點數,適合在生成回答前驗證金鑰。
curl --fail-with-body \
"$REGUNOW_BASE_URL/api/v1/models" \
-H "Authorization: Bearer $REGUNOW_API_KEY"| 欄位 | 內容 |
|---|---|
models | 模型 ID、名稱、預設強度與支援的強度值。 |
default | 預設模型與強度選項。 |
jurisdictions | 支援的管轄區識別碼及名稱。 |
languages | 支援的回答語言代碼及名稱。 |
capabilities | 串流輸出和檔案支援情況,以及檔案數量與大小限制。 |
請使用目前部署的目錄傳回值。在管轄區模式下,省略 model 和 effort 即可使用允許的預設值。若指定,則必須為預設的 Sonnet 4.6 / 高。不含附件時,擷取服務管理回答模型;回應中的模型欄位描述已驗證的選擇。
4. 聊天回答生成
POST/api/v1/chat/completions
傳送包含 messages 陣列的 JSON 主體。預設情況下,API 會傳回完整的 JSON 回答。將 stream 設為 true 即可逐步接收文字。
| 欄位 | 預設 | 說明 |
|---|---|---|
messages | 必填 | 1–20 則交替的 user 和 assistant 訊息,以 user 結尾。每則均包含 role 和字串 content。 |
mode | freestyle | freestyle 用於彈性的法規研究,jurisdiction 用於受支援的管轄區研究。 |
jurisdiction | null | 管轄區模式下必填。使用目錄中的識別碼。在自由模式中必須省略或設為 null。 |
model | 目錄預設值 | 受支援的模型 ID。管轄區模式要求使用預設的 Sonnet 選擇。 |
effort | 模型預設值 | 該模型支援的強度值。管轄區模式要求高。 |
web_search | auto / off | 自由模式支援 auto、on 或 off,預設為 auto。管轄區模式只接受 off。 |
response_language | en | 目錄中的回答語言代碼。文件語言不限制回答語言。 |
stream | false | 設為 true 以使用伺服器傳送事件(SSE)。 |
file_ids | 無 | 最多五個不重複的可用檔案 UUID,檔案必須屬於金鑰擁有者的帳戶。 |
{
"messages": [{
"role": "user",
"content": "What retention period does this policy specify? Cite the document."
}],
"mode": "freestyle",
"web_search": "off",
"response_language": "en",
"file_ids": ["YOUR_FILE_ID"]
}將 YOUR_FILE_ID 替換為上傳成功後傳回的 UUID。後續提問應傳送相關的使用者與助理訊息歷史,並重新傳送所需的 file_ids。API 不會自動記住對話歷史或附件。
系統訊息與未知欄位會被拒絕。此 API 不提供圖片生成、報告生成、音訊輸入或已儲存記憶的存取。上傳的圖片可作為提問輸入。
5. 回答與引用
回答生成成功後會傳回 object: "regunow.chat.completion"、回答、來源中繼資料、用量與耗時。以下值僅供示範。
{
"id": "request-uuid",
"request_id": "request-uuid",
"object": "regunow.chat.completion",
"created": 1790812800,
"model": "jp.anthropic.claude-sonnet-4-6",
"latency": {
"time_to_first_token_ms": 2345,
"time_to_answer_completion_ms": 9876
},
"output": {
"input_files": [],
"role": "assistant",
"content": "The complete answer...",
"finish_reason": "end_turn",
"citations": [],
"sources": [],
"web_search": false
},
"usage": {
"input_tokens": 1234,
"output_tokens": 456,
"charged_microcredits": 789000,
"charged_credits": 0.789
}
}output.content包含最終回答文字。引用偏移量以此最終字串為準;sourceIndexes識別output.sources中的項目。- 來源包含標題、檔名、MIME 類型、URI 及擷取的摘錄。請在回答旁顯示摘錄與引用。
- 來源 URI 是位置識別,可能指向私有儲存空間。只有發布者的公開 URL 才應作為使用者可開啟的連結。API 不提供法規來源檔案的下載或翻譯。
- 使用附件時,
output.input_files識別提供的檔案。附件來源具有file_id;法規與網頁來源具有file_id: null。附件 URI 為null。 - 存在輸入檔案並不代表它支持每項陳述。模型可能省略文內引用,圖片或掃描檔的摘錄也可能為空。
擷取服務未提供權杖數量時,其值可能為 null,表示未知而非零。charged_credits 是記錄的客戶費用。created 是以秒為單位的 Unix 時間戳記,延遲值以毫秒為單位。
每個端點回應均含 X-Request-Id 標頭。請保留此識別碼以便排查問題。聊天回答和錯誤 JSON 也包含 request_id。
6. 串流輸出
設定 "stream": true。回應使用 text/event-stream。使用 cURL 時加入 -N 可停用輸出緩衝。
curl --fail-with-body -N \
"$REGUNOW_BASE_URL/api/v1/chat/completions" \
-H "Authorization: Bearer $REGUNOW_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: streaming-question-001" \
-d '{
"messages": [{"role":"user","content":"Summarize EU product-safety obligations."}],
"mode": "jurisdiction",
"jurisdiction": "eu",
"stream": true
}'讀取以空行分隔的完整 SSE 事件。一個網路資料區塊可能包含部分事件或多個事件。收到 choices[0].delta.content 時將其附加。忽略以 : 開頭的連線維持註解。
data: {"choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
data: {"choices":[{"index":0,"delta":{"content":"The answer begins..."},"finish_reason":null}]}
data: {"choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
data: {"choices":[],"usage":{"prompt_tokens":1234,"completion_tokens":456,"total_tokens":1690},"regunow":{"output":{},"latency":{},"usage":{"charged_credits":0.789,"charged_microcredits":789000}}}
data: [DONE]最後的中繼資料事件含有空的 choices 陣列。最終回答、引用與來源位於 regunow.output,耗時位於 regunow.latency,點數位於 regunow.usage。權杖數量使用 usage.prompt_tokens 和 usage.completion_tokens。
擷取與引用處理可能造成暫停。在最終中繼資料抵達前,應將文字視為暫定內容。串流開始後的錯誤會以 error 物件及隨後的 [DONE] 傳回;僅有 HTTP 200 並不能確認成功。此前的驗證或檢查失敗會傳回一般 JSON 錯誤回應。
已完成作業的重播仍使用 SSE,並以單一文字區塊傳回已儲存的回答,同時包含 X-Idempotent-Replayed: true。
7. 檔案
上傳文件或圖片,再將其 ID 附加到聊天請求中。檔案共用金鑰擁有者的檔案庫與儲存配額。文件最大為 10 MiB,圖片最大為 5 MiB。
| 類別 | 格式 |
|---|---|
| 文件 | PDF, TXT, CSV, TSV, Markdown, DOC, DOCX, ODT, RTF, XLSX, ODS, PPTX, ODP |
| 圖片 | JPEG, PNG, WebP, GIF |
直接上傳(建議)
此三步驟流程將原始檔案位元組直接傳送到儲存空間,避開應用程式請求主體限制。建議託管整合使用,尤其適用於較大的檔案。
POST/api/v1/files/upload-intents
只傳送 name、mime_type 和 bytes(確切的檔案大小)。成功後傳回 HTTP 201、待處理檔案 ID,以及有效期為 300 秒的簽署上傳 URL。
curl --fail-with-body \
"$REGUNOW_BASE_URL/api/v1/files/upload-intents" \
-H "Authorization: Bearer $REGUNOW_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: policy-intent-001" \
-d '{"name":"policy.txt","mime_type":"text/plain","bytes":16384}'{
"id": "YOUR_FILE_ID",
"status": "pending",
"upload_method": "PUT",
"upload_url": "SIGNED_UPLOAD_URL",
"upload_headers": {"Content-Type": "text/plain"},
"expires_in": 300
}將 FILE_ID 設為傳回的 id。使用傳回的 upload_method、upload_url 和 upload_headers 上傳完全一致的原始位元組。請設定確切的 Content-Length。不要向上傳 URL 傳送 Regunow API 金鑰,也不要將簽署 URL 寫入日誌。
# Set UPLOAD_URL from the intent response. Use its returned upload_headers.
# This example assumes policy.txt is exactly 16,384 bytes.
curl --fail-with-body -X PUT "$UPLOAD_URL" \
-H "Content-Type: text/plain" \
-H "Content-Length: 16384" \
--data-binary @./policy.txtPOST/api/v1/files/{fileId}/complete
使用不同的冪等鍵傳送 {}。完成作業會驗證位元組,並傳回 HTTP 200 和可用檔案。只有完成成功後,才能在 file_ids 中使用其 ID。
curl --fail-with-body \
"$REGUNOW_BASE_URL/api/v1/files/$FILE_ID/complete" \
-H "Authorization: Bearer $REGUNOW_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: policy-complete-001" \
-d '{}'上傳 URL 過期後,刪除未使用的待處理檔案,並用新鍵準備另一次上傳。重播準備請求不會延長 URL 有效期。如果完成結果不確定,請先查詢檔案狀態。如果仍待處理,請用新的冪等鍵重試完成;舊鍵會傳回已儲存的結果。對已可用檔案執行完成作業會傳回其中繼資料。
多部分上傳
POST/api/v1/files
較小的檔案可透過一個名為 file 的 multipart/form-data 欄位傳送。請傳送原始位元組,而非 base64 或遠端 URL。託管閘道的主體上限可能低於 API 的檔案大小限制。
curl --fail-with-body \
"$REGUNOW_BASE_URL/api/v1/files" \
-H "Authorization: Bearer $REGUNOW_API_KEY" \
-H "Idempotency-Key: policy-upload-001" \
-F "file=@./policy.pdf;type=application/pdf"上傳成功後傳回 HTTP 201 和可用檔案,無須另外呼叫完成作業。
{
"id": "YOUR_FILE_ID",
"object": "regunow.file",
"name": "policy.pdf",
"mime_type": "application/pdf",
"category": "file",
"bytes": 16384,
"status": "available",
"created_at": "2026-10-01T00:00:00Z",
"request_id": "request-uuid",
"usage": {"charged_microcredits":500,"charged_credits":0.0005}
}列出、查詢及刪除檔案
| 方法 | 端點 | 行為 |
|---|---|---|
| GET | /api/v1/files | 列出可用檔案。limit 預設為 20,接受 1–100。結果包含 data、has_more 和 next_after。下一頁請將 next_after 作為 after 傳入。 |
| GET | /api/v1/files/{fileId} | 查詢檔案中繼資料及狀態(待處理、可用或失敗)。 |
| DELETE | /api/v1/files/{fileId} | 永久刪除檔案庫中的檔案及分析與預覽產物。傳回 object: "regunow.file.deleted" 和 deleted: true。 |
curl --fail-with-body \
"$REGUNOW_BASE_URL/api/v1/files?limit=20" \
-H "Authorization: Bearer $REGUNOW_API_KEY"同一帳戶的金鑰可存取該帳戶檔案庫中的可用檔案。不存在的檔案與其他帳戶的檔案都會傳回 404。如果應用程式透過一個帳戶服務多位使用者,請在附加或刪除檔案前實施自己的使用者權限檢查。
待處理與失敗的上傳會占用配額,直到清理成功。超過 24 小時的未完成上傳可被清理。可用檔案已通過上傳驗證,但擷取在提問時才進行,因此損毀、加密或無法讀取的文件仍可能在分析時失敗。
8. 點數與限制
回答生成、上傳及刪除均記錄計量用量。模型目錄與檔案中繼資料讀取不單獨收取點數。文件擷取和圖片分析透過聊天請求計費。
使用 usage.charged_credits 查看作業費用。1 點數等於 1,000,000 微點數。金鑰點數上限與帳戶點數相互獨立,任一不足都可能阻止請求。請在設定 → API 金鑰中查看用量並設定上限。
| 限制 | 額度 |
|---|---|
| API 金鑰 | 每個帳戶 25 個 |
| 同時回答生成與檔案修改 | 每個金鑰 10 個 |
| 回答生成 JSON 主體 | 192 KiB |
| 每次回答生成的訊息數 | 1–20 |
| 訊息文字 | 每則訊息 32,000 字元,合計 64,000 字元 |
| 每次回答生成的附件數 | 5 個不同檔案 |
| 文件大小 | 每個檔案 10 MiB |
| 圖片大小 | 每個檔案 5 MiB |
| 檔案庫儲存空間 | 與帳戶檔案庫共用 5 GiB |
| 冪等鍵 | 1–120 個可列印 ASCII 字元,不含空格 |
| 重播期限 | 結算後 24 小時 |
即使每則訊息與附件符合 API 限制,模型的上下文與視覺限制仍然適用。金鑰預算依每日、每週或每月的滾動週期重設,從金鑰建立或前一週期更新時開始計算。
有可用預算時開始的請求可能略微超出金鑰的小額剩餘預算,因為最終費用在生成後才確定。達到上限後,新的回答生成與檔案修改會被阻止。預留機制避免同時請求重複使用同一份可用金鑰預算。
9. 安全重試
每次回答生成、上傳、上傳完成與刪除都應傳送 Idempotency-Key。它是選用項目,但強烈建議使用,以避免連線失敗後重複處理及收費。
Idempotency-Key: a-unique-key-for-this-operation- 為每個新作業產生唯一鍵,並與原始請求一同儲存。
- 使用相同的 API 金鑰、冪等鍵與不變的輸入重試。結算後 24 小時內,可重播已儲存的狀態與回應,無須再次呼叫供應商,也不再收費。
- 重播會包含
X-Idempotent-Replayed: true。以不同輸入重用鍵,或首次請求仍在處理時重用鍵,都會傳回 409。 - 快取結果可能包含錯誤。同一鍵可能傳回相同失敗,而不會重新執行。開始新作業前請先檢查結果。
- 重播期限到期後,重用鍵會開始新請求,並可能再次收費。
暫時網路故障、速率限制或服務故障應使用指數退避。處理結果不確定的請求時保留相同冪等鍵。無效輸入、過期憑證或點數不足,應先修正原因再重試。
刪除檔案不會清除重播期限內已快取的回答生成或上傳回應。刪除後重播上傳會傳回原始回應,但不會重新建立檔案。
10. 錯誤
錯誤使用固定的 JSON 結構。處理時請查看 error.code,聯絡支援時保留 request_id 或 X-Request-Id 標頭。
{
"error": {
"type": "request_error",
"code": "invalid_request",
"message": "messages must contain 1 to 20 alternating user/assistant messages, end with a user message, and stay within 64,000 characters."
},
"request_id": "request-uuid"
}| 狀態 | 常見代碼 | 處理方法 |
|---|---|---|
| 400 | invalid_request | 檢查 JSON、允許的欄位、訊息、模型選項及檔案 ID。 |
| 401 | invalid_api_key | 檢查 Bearer 標頭,並替換過期、停用或已刪除的金鑰。 |
| 402 | account_quota_exceeded, api_key_limit_exceeded | 檢查帳戶點數與金鑰點數上限。 |
| 403 | pro_required, legal_acceptance_required | 恢復 Pro 權限,或讓擁有者在 Regunow 中同意現行政策。 |
| 404 | file_not_found | 使用屬於金鑰擁有者帳戶的檔案。 |
| 409 | idempotency_conflict, request_in_progress | 輸入變更時使用新鍵。若請求仍在處理中,請等待後重試原作業。 |
| 413 | request_too_large | 減小訊息或檔案大小。若閘道主體上限是原因,請使用直接上傳。 |
| 415 | unsupported_media_type | 使用端點要求的 Content-Type 與未壓縮的請求主體。 |
| 429 | concurrency_limit_exceeded, upstream_rate_limited | 降低同時執行數,並使用指數退避重試。 |
| 502–504 | upstream_unavailable, upstream_timeout, service_unavailable, usage_settlement_failed | 暫時故障請逐步延長等待時間,並使用相同冪等鍵重試。已儲存的失敗可能會被重播。 |
