DEVELOPER API
Developer API 接口说明
使用现有 Xaporia 账户和 USD 钱包,通过统一 Gateway 调用当前启用的模型。
Base URL
API Base URL:https://xaporia.com/v1
获取 API Key
登录后进入 Dashboard → Developer API Keys 创建密钥。完整密钥只显示一次;数据库仅保存 SHA-256 哈希。请放在服务端环境变量中,不要提交到代码或放进浏览器。
认证与幂等
使用 Authorization: Bearer YOUR_XAPORIA_API_KEY。为确保同一逻辑请求重试不会再次创建计费请求,请自行生成并复用稳定的 Idempotency-Key。它为可选项以兼容 OpenAI 客户端;不提供时,每次重试都会视为新请求,可能再次计费。相同 Key 的重放返回 409(不会再次调用或扣款,也不会回放原响应);相同 Key 配不同参数也返回冲突。
Chat Completions 请求
POST /chat/completions。支持 system/user/assistant 文本消息、temperature、top_p、max_tokens/max_completion_tokens 和 stream。单请求最多 64 条消息,正文上限 1 MiB。当前 Gateway 不支持 stop、frequency_penalty、presence_penalty、工具调用和多模态输入;不支持的采样参数会明确报错。
curl https://xaporia.com/v1/chat/completions \
-H 'Authorization: Bearer xap_你的密钥' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: order-123-attempt-1' \
-d '{"model":"xaporia-mock","messages":[{"role":"user","content":"Hello, Xaporia!"}]}'JavaScript / TypeScript(使用 OpenAI SDK):
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.XAPORIA_API_KEY,
baseURL: "https://xaporia.com/v1",
});
// Reuse this value when retrying the same logical request.
const idempotencyKey = crypto.randomUUID();
const completion = await client.chat.completions.create({
model: "xaporia-mock",
messages: [{ role: "user", content: "Hello, Xaporia!" }],
stream: false,
}, { headers: { "Idempotency-Key": idempotencyKey } });
console.log(completion.choices[0]?.message.content, completion.usage);Python 示例
使用 Python 标准库发送非流式请求:
import json
import os
import urllib.request
payload = {"model": "xaporia-mock", "messages": [{"role": "user", "content": "你好"}]}
request = urllib.request.Request(
"https://xaporia.com/v1/chat/completions",
data=json.dumps(payload).encode(),
headers={
"Authorization": "Bearer " + os.environ["XAPORIA_API_KEY"],
"Content-Type": "application/json",
"Idempotency-Key": "unique-key-for-this-logical-request",
},
)
with urllib.request.urlopen(request) as response:
print(json.load(response))同一逻辑请求重试时复用幂等键;每个新请求使用唯一键。示例模型仅用于格式说明,请先查询 /v1/models 获取当前可用模型。
非流式响应
{
"id": "chatcmpl-…",
"object": "chat.completion",
"created": 1793500000,
"model": "xaporia-mock",
"choices": [{ "index": 0, "message": { "role": "assistant", "content": "Hello!" }, "finish_reason": "stop" }],
"usage": { "prompt_tokens": 8, "completion_tokens": 3, "total_tokens": 11 }
}流式响应
设置 stream: true 后返回 text/event-stream。内容以 OpenAI Chat Completion chunk 发送,usage 在流结束附近发送,最后为 data: [DONE]。OpenAI SDK 示例:
// Reuse this value when retrying the same logical request.
const idempotencyKey = crypto.randomUUID();
const stream = await client.chat.completions.create({
model: "xaporia-mock",
messages: [{ role: "user", content: "Count from one to three." }],
stream: true,
stream_options: { include_usage: true },
}, { headers: { "Idempotency-Key": idempotencyKey } });
for await (const chunk of stream) {
process.stdout.write(chunk.choices[0]?.delta.content ?? "");
if (chunk.usage) console.log("\nUsage:", chunk.usage);
}SSE 线格式示例:
data: {"object":"chat.completion.chunk","choices":[{"delta":{"content":"Hello"},"finish_reason":null}]}
data: {"object":"chat.completion.chunk","choices":[],"usage":{"prompt_tokens":8,"completion_tokens":3,"total_tokens":11}}
data: [DONE]模型列表
GET /v1/models 只列出当前 enabled 且有有效价格的公开模型,不包含供应商路由信息。
curl https://xaporia.com/v1/models \
-H 'Authorization: Bearer xap_你的密钥'错误码
invalid_api_key(401):缺少、错误或已禁用密钥。insufficient_quota(402):钱包可用余额不足。model_unavailable(404):模型不存在、禁用或当前无有效价格。idempotency_conflict/idempotency_replay(409):幂等键参数冲突或请求已处理。rate_limit_exceeded(429):单个 Key 每分钟最多 60 次请求。invalid_request(400):请求格式或参数不受支持。
计费规则
Web Chat 和 Developer API 共用 USD 钱包、AI Gateway 和 Billing Engine。请求前按当前价格快照冻结预估费用;收到经过校验的实际 usage 后按 Token 实际成本结算并释放剩余冻结额。余额不足时不会调用模型。调用结果或 usage 不确定(例如流中断)时,冻结金额保持 RESERVED 等待对账,不会臆测零成本。Mock 模型的价格仅用于测试,不代表商业价格。