跳到主要内容

Quickstart

本指南帮助新用户在不联系客服的情况下完成第一次 Codexpertise API 请求。

Endpoint contract

TODO: verify against sub2api。以下示例使用 OpenAI-compatible 的 POST /v1/chat/completions 请求形态。如果 dashboard 显示了不同的首次调用 endpoint,请保留相同的 API base URL 和 bearer token 写法,并使用 dashboard 显示的 endpoint。

1. 注册或登录​

访问 dash.codexpertise.com 注册或登录。请使用 拥有目标额度或计费计划的账号进行测试。

2. 创建 API Key​

在 dashboard 的 API key 区域创建一个新的本地测试 key。只复制一次,保存到安全 位置。下面所有示例统一使用 YOUR_API_KEY 作为占位符。

3. 设置 API Base URL​

API 客户端统一使用:

https://api.codexpertise.com

本地测试前先设置环境变量:

环境变量
export CODEXPERTISE_API_KEY="YOUR_API_KEY"
export CODEXPERTISE_BASE_URL="https://api.codexpertise.com"
export CODEXPERTISE_MODEL="YOUR_MODEL"

YOUR_MODEL 请替换成你的账号或套餐可用的模型名称。生产模型目录完成验证前, 本文不会列出未经确认的模型列表。

4. 使用 curl 发起请求​

curl
curl -sS "$CODEXPERTISE_BASE_URL/v1/chat/completions" \
-H "Authorization: Bearer $CODEXPERTISE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "YOUR_MODEL",
"messages": [
{
"role": "user",
"content": "Say hello in one short sentence."
}
]
}'

成功时会返回 relay 的 JSON 响应。如果收到错误,先查看下方常见错误,再决定是否 轮换 key 或提交支持请求。

5. 使用 Node.js 发起请求​

此示例使用当前 Node.js 内置的 fetch,不需要额外依赖。

quickstart.mjs
const apiKey = process.env.CODEXPERTISE_API_KEY;
const baseURL = process.env.CODEXPERTISE_BASE_URL ?? "https://api.codexpertise.com";
const model = process.env.CODEXPERTISE_MODEL;

if (!apiKey || !model) {
throw new Error("Set CODEXPERTISE_API_KEY and CODEXPERTISE_MODEL first.");
}

const response = await fetch(`${baseURL}/v1/chat/completions`, {
method: "POST",
headers: {
Authorization: `Bearer ${apiKey}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
model,
messages: [
{
role: "user",
content: "Say hello in one short sentence."
}
]
})
});

const body = await response.text();

if (!response.ok) {
throw new Error(`Request failed: ${response.status} ${body}`);
}

console.log(JSON.parse(body));

运行方式:

CODEXPERTISE_API_KEY="YOUR_API_KEY" \
CODEXPERTISE_BASE_URL="https://api.codexpertise.com" \
CODEXPERTISE_MODEL="YOUR_MODEL" \
node quickstart.mjs

6. 使用 Python 发起请求​

此示例只使用 Python 标准库,不需要安装额外包。

quickstart.py
import json
import os
import urllib.request


api_key = os.environ["CODEXPERTISE_API_KEY"]
base_url = os.environ.get("CODEXPERTISE_BASE_URL", "https://api.codexpertise.com").rstrip("/")
model = os.environ["CODEXPERTISE_MODEL"]

payload = {
"model": model,
"messages": [
{
"role": "user",
"content": "Say hello in one short sentence.",
}
],
}

request = urllib.request.Request(
f"{base_url}/v1/chat/completions",
data=json.dumps(payload).encode("utf-8"),
headers={
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json",
},
method="POST",
)

with urllib.request.urlopen(request, timeout=60) as response:
print(json.dumps(json.loads(response.read()), indent=2))

运行方式:

CODEXPERTISE_API_KEY="YOUR_API_KEY" \
CODEXPERTISE_BASE_URL="https://api.codexpertise.com" \
CODEXPERTISE_MODEL="YOUR_MODEL" \
python3 quickstart.py

7. 配置 Codex CLI 或 coding agent​

许多 coding agent 支持 OpenAI-compatible 环境变量。先使用占位符完成配置, 确认可用后再把值放入 shell profile、CI secret store 或本地 secret manager。

OpenAI-compatible 环境变量
export OPENAI_API_KEY="YOUR_API_KEY"
export OPENAI_BASE_URL="https://api.codexpertise.com"
export OPENAI_MODEL="YOUR_MODEL"

如果你的 agent 使用配置文件而不是环境变量,可以保留同样的值:

agent-config.example.yaml
api:
base_url: "https://api.codexpertise.com"
api_key: "YOUR_API_KEY"
model: "YOUR_MODEL"

TODO: verify against sub2api,并结合具体 Codex CLI 或 coding-agent 客户端版本 确认后,再把客户端专用配置字段写成稳定契约。

常见错误​

401 Unauthorized​

API key 缺失、格式错误、已过期,或复制时带入了多余空格。确认请求中包含 Authorization: Bearer YOUR_API_KEY,并已将占位符替换成真实 key。

403 Forbidden​

Key 有效,但账号、套餐、来源或 route 没有权限访问当前 API。请检查 dashboard 权限、额度归属,以及该 route 是否已对你的套餐开放。

429 Rate Limited​

账号超过了速率限制或额度窗口。等待一段时间后重试,减少并发请求,并在 dashboard 中检查用量。

5xx Upstream Error​

Relay 或上游 provider 返回了服务端错误。请使用 backoff 重试。如果问题持续, 记录时间和 request ID,但不要分享原始 API key 或完整 Authorization header。

Streaming interrupted​

流式响应被客户端、网络、代理、超时或上游 provider 中断。可以先重试一次,再测试 非 streaming 请求,并尽量减少响应长度。

安全提醒​

  • 不要把 API key 提交到 git。
  • 本地和生产环境都应使用环境变量或 secret manager。
  • 如果 key 泄露,请立即在 dashboard 中轮换,并从日志、工单、截图和仓库历史中 移除泄露值。