付費查核與免費入口
/api/fact-checkx402 付費 API:verify 通過後轉送 fact-check-core,成功回應才 settle(正式預設每次 0.05 USDC)。
/api/fact-check同樣需要付款;query string 會轉成 core 的 POST JSON。
/api/demo首頁使用的免費入口,保留 Origin guard、CORS 與 IP 限流(每 IP 60 秒一次)。
直接試用
查核一段文字
輸入你想確認的具體主張,也可以附上背景網址。結果會保留證據、原始分數與不確定性。
01 / 開始呼叫
第一個查核請求
`/api/fact-check` 是 x402 付費 API,正式預設每次查核收取 0.05 USDC。第一次呼叫會回 402;請用支援 x402 的錢包依 PAYMENT-REQUIRED 產生付款簽章, 再以 PAYMENT-SIGNATURE(或舊版 X-PAYMENT)重試相同請求。 首頁互動表單則使用下方的免費 /api/demo,不需要錢包。
// 第一次請求會回 402;用錢包依 PAYMENT-REQUIRED 產生簽章
const paymentSignature = await wallet.createPaymentSignature(/* PAYMENT-REQUIRED */);
const response = await fetch("/api/fact-check", {
method: "POST",
headers: {
"Content-Type": "application/json",
"PAYMENT-SIGNATURE": paymentSignature
},
body: JSON.stringify({
text: "非學校型態學生,國中小以下目前沒有普遍補助"
})
});
const result = await response.json();
console.log(result); 正式部署設定使用 Base mainnet(eip155:8453)、CDP facilitator 與 0.05 USDC;本機範例預設改用 Base Sepolia(eip155:84532)公開 facilitator。 付款簽章由錢包或 x402 client 產生,請勿在瀏覽器程式碼中放入 facilitator secret。
付費端點允許寬鬆跨來源 CORS,預檢允許 PAYMENT-SIGNATURE 與 X-PAYMENT。免費 /api/demo 仍只接受本站與既有允許清單來源, 並保留 Origin guard、CORS 與 IP 限流;預設每個 IP 每 60 秒一次,可由 RATE_LIMIT_WINDOW_MS 調整。
使用 GET 呼叫
使用 --data-urlencode 編碼中文、空白及特殊字元。
curl --get 'https://check.vtaiwan.tw/api/fact-check' \
--data-urlencode 'text=非學校型態學生,國中小以下目前沒有普遍補助'附上 URL,補充查核背景
GET 與 POST 都接受選填的 url。以下示範 GET;POST 則在 JSON 加入相同欄位。
curl --get 'https://check.vtaiwan.tw/api/fact-check' \
--data-urlencode 'text=非學校型態學生,國中小以下目前沒有普遍補助' \
--data-urlencode 'url=https://law.moj.gov.tw/LawClass/LawAll.aspx?pcode=A0000001'02 / 輸入參數
一段文字,一個選填網址
| 欄位 | 必填 | 格式與限制 |
|---|---|---|
text | 是 | string,去除首尾空白後不可為空,最多 10,000 字(Unicode code point)。 |
url | 否 | 公開 HTTP/HTTPS 網址,最多 2,048 個 UTF-16 code unit;不可包含帳號密碼或指向內網。 |
POST 使用 Content-Type: application/json,請求本文上限為 128,000 bytes。沒有網址時請省略 url,不要傳空字串或 null。
本 Worker 只負責輸入基本格式與公開網址驗證,不執行查核模型。GET 的 query string 會轉成 core 所需的 POST JSON;核心回應本文與 X-Request-Id、 Cache-Control、X-Fact-Check-Cache 等標頭會原樣回傳。
03 / 讀懂回應
判斷結果,也保留證據脈絡
以下是「證據不足」的格式示例,並非對範例主張的實際查核結果。completed 表示流程完成,仍可能得到 insufficient_evidence。
{
"text": "非學校型態學生,國中小以下目前沒有普遍補助",
"status": "completed",
"moderation": {
"decision": "allow",
"categories": []
},
"factuality": 0.7,
"confidence": 0.4,
"verdict": "mostly_supported",
"related_checks": [],
"feedback": "查無相關查核資料,以下為常識判斷:此主張與常見制度描述大致相符,請自行查證。",
"meta": {
"request_id": "example-request-id",
"cofacts_candidates": 0,
"cofacts_relevant": 0,
"cofacts_human_checks": 0,
"cofacts_ai_checks": 0,
"url_context_used": false,
"url_context_allowlisted": false,
"no_relevant_evidence": true,
"warnings": []
}
}factuality- 0~1,表示證據支持主張的程度。它不是主張為真的機率;無證據時的 0.5 表示無法判定。
confidence- 0~1,表示判斷所依據的證據是否充分、可靠且一致。應與 factuality 一起閱讀。
feedback- 繁體中文說明,補充證據限制、適用範圍與需要進一步查證之處。
related_checks- 相關查核陣列,以
cofacts_human/cofacts_ai區分人工與 AI 回覆。每筆包含查核文字與 Cofacts 原文url;有引文時另附reference_url/reference_urls。 meta- 包含 request ID、候選及證據數量、是否使用 URL 背景,以及
warnings警告。
六種判斷結果
supported證據支持mostly_supported證據大致支持mixed支持與反駁的證據並存mostly_refuted證據大致反駁refuted證據反駁insufficient_evidence證據不足,無法判定兩種分數各有用途:retrieval_score 只是 Cofacts 搜尋排序;relevance_score 是 0~1 的語意相關程度。兩者都不代表真假,不能直接換算 factuality。
04 / 狀態與錯誤
先看 HTTP,再看核心回應
付款放行後,查核 JSON 與核心的狀態欄位會原樣轉送;服務自身只負責付款與 proxy。 所有回應都附 X-Request-Id,並維持 Cache-Control: no-store。
| HTTP | error | 處理方式 |
|---|---|---|
| 402 | PAYMENT_REQUIRED | 依 PAYMENT-REQUIRED 付款,帶 PAYMENT-SIGNATURE 重試。 |
| 400 | INVALID_INPUT | 修正 JSON、文字或網址後重試。 |
| 413 | PAYLOAD_TOO_LARGE | 縮短請求本文。 |
| 502 | UPSTREAM_UNAVAILABLE | service binding 或 core 暫時不可用;這次錯誤不會結算付款,詳見 README。 |
| 500 | INTERNAL_ERROR | 提供 request ID 協助排查。 |
`/api/demo` 另有免費入口的 FORBIDDEN_ORIGIN 與 RATE_LIMITED; 這些守護不套用到 x402 付費端點。
05 / x402 付款流程
先驗證,再轉送;成功才結算
- 1
收到 402
第一次呼叫不帶付款,服務回傳 PAYMENT-REQUIRED 與繁體中文付款說明。
- 2
使用錢包付款
正式預設在 Base mainnet 以 USDC 支付 0.05;本機範例使用 Base Sepolia。
- 3
帶簽章重試
把 PAYMENT-SIGNATURE(或 X-PAYMENT)附在相同 GET/POST 請求重試。
- 4
驗證、轉送,再結算
facilitator verify 成功後才透過 service binding 送到 fact-check-core;handler 回應
<400(本 API 通常為 2xx)才呼叫 settle。回應>=400時不結算,錯誤直接回客戶端。 - 5
保留核心回應
核心回應本文與 X-Request-Id、Cache-Control、X-Fact-Check-Cache 等標頭原樣回傳。
x402 沒有 JWT cookie 通行證;每個付費 API 請求都要 verify。core 回 >=400 或 fetch 失敗轉 502 時不結算;core 回 2xx 但內容為錯誤仍可能結算,settle 網路失敗則需另外確認付款狀態。
06 / 自行架設
設定 facilitator 與 core binding
本專案以 Cloudflare Workers、Hono 與 @x402/hono 執行。維運者需設定 PAY_TO、X402_NETWORK、X402_PRICE 與 FACILITATOR_URL,並在 wrangler.jsonc 維持 FACT_CHECK_CORE service binding。Base mainnet 上線前請準備 production facilitator;正式設定使用 CDP 短效 JWT,公開 x402.org facilitator 僅適合 Base Sepolia 測試。