direct 端点客户端计量上报:恒 source=client / billable=0 / cost=0;client_event_id 幂等;归账 api_key_id;零正文白名单(越权字段 400);请求签名三头可选(在场恒校验)
POST
/t1/usage
const url = 'https://api.tansr.com/t1/usage';const options = { method: 'POST', headers: { 'x-tansr-key-id': '<x-tansr-key-id>', 'x-tansr-key': '<x-tansr-key>', 'Content-Type': 'application/json' }, body: '{"events":[{"clientEventId":"example","modelHandle":"example","modelId":"example","inTokens":1,"outTokens":1,"cacheReadTokens":0,"cacheWriteTokens":0,"estimated":true,"occurredAt":"example","sessionId":"example","purpose":"example"}]}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://api.tansr.com/t1/usage \ --header 'Content-Type: application/json' \ --header 'x-tansr-key: <x-tansr-key>' \ --header 'x-tansr-key-id: <x-tansr-key-id>' \ --data '{ "events": [ { "clientEventId": "example", "modelHandle": "example", "modelId": "example", "inTokens": 1, "outTokens": 1, "cacheReadTokens": 0, "cacheWriteTokens": 0, "estimated": true, "occurredAt": "example", "sessionId": "example", "purpose": "example" } ] }'Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Header Parameters
Section titled “Header Parameters”x-tansr-ts
string
签名时间戳(unix 秒,十进制串;T-A34):与服务器时钟偏差 >300s → 401 signature_invalid
x-tansr-nonce
string
签名随机数(≥16 字符;T-A34):同 keyId 600s 窗内重现 → 401 nonce_replayed
x-tansr-sign
string
请求签名(hex 小写;T-A34):HMAC-SHA256(K=sha256(SK 明文) 原始摘要, TWP1-HMAC-SHA256\n{METHOD}\n{path+query}\n{ts}\n{nonce}\n{sha256hex(rawBody)});三头须同现,在场恒校验;app signRequired 或 TANSR_API_TWP_REQUIRE_SIGNATURE=1 时未签名恒 401 signature_invalid
Request Bodyrequired
Section titled “Request Bodyrequired”Media typeapplication/json
object
events
required
Array<object>
Schema 白名单:出现任何正文类字段即 400(总则 5 零留存)
object
clientEventId
required
客户端幂等键
string
modelHandle
required
string
modelId
required
string
inTokens
required
integer
outTokens
required
integer
cacheReadTokens
required
integer
cacheWriteTokens
required
integer
estimated
required
boolean
occurredAt
required
string
sessionId
string
purpose
计费归属用途(G-A10;批ι 起词形受理,语义注册表见 contract/twp.ts TWP_PURPOSES)
string
Responses
Section titled “Responses”收单({accepted, duplicates})
Media typeapplication/json
object
key
additional properties
any
Examplegenerated
{}白名单外字段
Media typeapplication/json
object
error
required
object
code
required
错误码注册表单源派生(src/http/errors.ts ERROR_CODES;码稳定,消费方按码翻译)
string
message
required
string
requestId
required
string
detail
object
Example
{ "error": { "code": "adjudicator_not_authorized" }}App_key_invalid / signature_invalid / nonce_replayed(T-A34)
Media typeapplication/json
object
error
required
object
code
required
错误码注册表单源派生(src/http/errors.ts ERROR_CODES;码稳定,消费方按码翻译)
string
message
required
string
requestId
required
string
detail
object
Example
{ "error": { "code": "adjudicator_not_authorized" }}本文是否有帮助?
感谢反馈,我们会持续改进这篇文章。