JuCode 文档
ApiAccount

调用明细

一次调用一行,按时间倒序分页。 ### 不返回的字段 调用日志里的上游诊断字段(上游账号标识、上游原始错误体、逐段延迟明细) **不在这里返回**。它们会点名具体的上游账号并附带厂商原始报文;你需要知道的是 请求失败了以及大致原因,而不是我们的哪个上游账号服务了它。 失败原因看 `status` 与 `http_status`。完整错误码表见 [错误码](/docs/errors)。

GET
/v1/open/logs

一次调用一行,按时间倒序分页。

不返回的字段

调用日志里的上游诊断字段(上游账号标识、上游原始错误体、逐段延迟明细) 不在这里返回。它们会点名具体的上游账号并附带厂商原始报文;你需要知道的是 请求失败了以及大致原因,而不是我们的哪个上游账号服务了它。

失败原因看 statushttp_status。完整错误码表见 错误码

Authorization

AuthorizationBearer <token>

Authorization: Bearer sk-juc-...

前缀必须是恰好 Bearer (首字母大写 + 单个空格)。bearerBEARER 或用制表符分隔都会被判为无效。

除 API Key 外,也接受 OAuth 设备访问令牌(仅限 oauth_access 类型的 JWT; 普通网页会话令牌会被拒绝)。

In: header

Query Parameters

start?string

窗口起点。接受 RFC 3339 时间串或裸的 Unix 秒数。省略时为 end 前 7 天。

无法解析的值会回落到默认窗口而不是报错——这是只读统计接口,把日期敲错的 调用方拿到「这是最近一周」比拿到一个还得去翻文档的 400 更有用。

end?string

窗口终点(不含)。接受 RFC 3339 或 Unix 秒数,省略时为当前时间。

model?string

模型名模糊匹配(不区分大小写)。

status?string

按状态精确过滤。

Value in

  • "ok"
  • "upstream_error"
  • "quota_exceeded"
  • "banned"
  • "internal_error"
  • "unauthorized"
endpoint?string

按端点精确过滤。

Value in

  • "chat_completions"
  • "responses"
  • "embeddings"
  • "image_generation"
  • "image_edit"
  • "image_variation"
  • "audio_speech"
  • "audio_transcription"
  • "audio_translation"
  • "rerank"
  • "video_generation"
limit?integer

每页条数,1200,默认 50。超出范围的值回落到默认值。

Range1 <= value <= 200
Default50
offset?integer

偏移量,默认 0

Range0 <= value
Default0

Response Body

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/v1/open/logs"
{  "total": 1284,  "limit": 50,  "offset": 0,  "logs": [    {      "id": "1c2d3e4f-5a6b-4c7d-8e9f-0a1b2c3d4e5f",      "request_id": "3f8a1c2e-5b4d-4e6f-9a0b-1c2d3e4f5a6b",      "created_at": "2026-08-14T02:41:07Z",      "endpoint": "chat_completions",      "model": "gpt-5.4",      "tokens_in": 3120,      "tokens_out": 244,      "cached_tokens_in": 2816,      "cache_creation_tokens_in": 0,      "cost": "0.01482000",      "currency": "CNY",      "billing_source": "balance",      "status": "ok",      "http_status": 200,      "latency_ms": 2841,      "stream": true,      "reasoning_effort": "medium",      "api_key_name": "生产环境"    }  ]}

列出可用模型分组 GET

返回本次凭证实际能路由到的模型分组,以及每个分组作用在基础价格上的倍率—— 最终价格是 `模型单价 × rate_multiplier`。 返回的是**交集**:账户本身可访问的分组,再与 Key 的 `allowed_groups` 取交。 因为这才是用这个凭证发请求时真正会被路由到的范围。 `billing_source` 说明该分组从哪里扣费:`plan_only` 只扣套餐配额, `balance_only` 只扣余额。

创建消息(Anthropic 兼容) POST

与 Anthropic Messages API 兼容。把官方 SDK 的 `base_url` 指向 `https://api.jucode.cn/anthropic`,或给 Claude Code 设置 `ANTHROPIC_BASE_URL`,即可直接使用。 注意路径**不在** `/v1` 下——完整路径是 `/anthropic/v1/messages`。 ### 两条执行路径,行为不同 **原生路径**——当路由到的上游本身就是 Anthropic 时,你的原始请求字节会被 直接转发(仅改写 `model`)。所有字段,包括本文档未列出的 `top_k`、`thinking`、`cache_control` 等,都会保留。 **桥接路径**——当路由到的是非 Anthropic 上游(如 OpenAI 兼容厂商)时,网关 会把请求降级翻译成 Chat Completions,再把响应还原成 Anthropic 格式。此时 **只有下列字段会保留**,其余字段被静默丢弃: `model` `max_tokens` `system` `messages` `stream` `temperature` `top_p` `stop_sequences` `tools` `tool_choice` `metadata` 你无法预先知道会走哪条路径——它取决于后台的模型路由配置。如果你依赖某个 Anthropic 专有参数,请确认该模型确实路由到 Anthropic 上游。 ### 与官方 API 的差异 - `max_tokens` 在官方 API 中是必填的,本网关**不强制**。仅当 `> 0` 时才转发。 - 桥接路径下 `message_start` 事件的 `usage` 字段恒为 `0`,真实用量在结尾的 `message_delta` 中给出。 - 桥接路径的 SSE **没有 `[DONE]` 哨兵**,以 `event: message_stop` 结束。 - 上游返回的 `reasoning_content`(DeepSeek 系非标准字段)会被转换成 Anthropic 的 `thinking` 块。 - **认证失败(401)返回的是 OpenAI 格式的错误体**,不是 Anthropic 格式。这是 因为认证中间件在进入本路由的处理器之前就已拒绝。Anthropic SDK 的错误解析 可能无法识别该响应体。