三步完成首次调用
- 注册并充值
完成邮箱验证,按需要充值余额、订阅套餐或兑换额度卡密。
- 创建 API 密钥
进入用户控制台的“API 密钥”,创建并妥善保存以
sk-开头的密钥。 - 查询模型再调用
先请求
/v1/models获取真实模型 ID,避免使用未配置的模型名称。
下面的命令只读取模型列表,不会产生模型推理费用。返回的 data[].id 就是后续请求应填写的模型 ID。
curl https://api.dhhapi.com/v1/models \
-H "Authorization: Bearer sk-your-api-key"Base URL 与请求头
https://api.dhhapi.comhttps://api.dhhapi.com/v1120–600 秒UTF-8推荐使用 Bearer Token。Claude 客户端可使用 x-api-key,Gemini 客户端也支持 x-goog-api-key。请勿把密钥放进 URL、浏览器前端代码或公开仓库。
Authorization: Bearer sk-your-api-key
Content-Type: application/json?key=... 和 ?api_key=... 已被禁用,会直接返回 400。服务端程序应通过请求头传递密钥。
模型名称以实时列表为准
不同 API 密钥可能绑定不同分组,因此可用模型、倍率和能力并不一定相同。不要仅凭第三方教程猜测模型名,也不要把网页显示名称当作模型 ID。
文本模型不一定支持生图,生图模型也不一定支持图片编辑。接口返回“model not found”或“not supported”时,应先确认密钥分组和模型能力。
当前网关端点
/v1/models返回当前 API 密钥所属分组实际可用的模型 ID。
/v1/messagesClaude 原生 Messages API,兼容 Claude SDK 与 Claude Code。
/v1/messages/count_tokens预估 Messages 请求所需的输入 Token。
/v1/responsesOpenAI Responses API,适合 Codex 与新一代 Agent 工作流。
/v1/chat/completionsOpenAI Chat Completions 兼容接口,支持文本、流式与图片理解。
/v1/embeddings生成文本向量;模型和渠道必须支持 Embeddings。
/v1/images/generations按提示词生成图片,支持 JSON 请求。
/v1/images/edits使用本地图片或图片 URL 进行改图、局部编辑和参考图生成。
/v1/images/generations/async提交长耗时生图任务,返回任务 ID 后轮询结果。
/v1/images/tasks/{task_id}使用提交任务时的同一把 API 密钥查询状态和结果。
/v1/videos/generations创建视频生成任务。
/v1beta/modelsGemini SDK/CLI 使用的原生模型列表。
/v1beta/models/{model}:generateContentGemini 原生 generateContent 格式。
最终能否调用取决于密钥所属分组、后台渠道、模型白名单和上游账号能力。建议上线前分别测试文字、识图和生图请求。
三种常用协议
OpenAI Chat Completions
curl https://api.dhhapi.com/v1/chat/completions \
-H "Authorization: Bearer sk-your-api-key" \
-H "Content-Type: application/json" \
-d '{
"model": "从 /v1/models 获取的模型 ID",
"messages": [
{"role": "system", "content": "你是一个简洁的中文助手。"},
{"role": "user", "content": "用三句话介绍大航海时代。"}
],
"stream": false
}'非流式响应的主要文本通常位于 choices[0].message.content。
OpenAI Responses
curl https://api.dhhapi.com/v1/responses \
-H "Authorization: Bearer sk-your-api-key" \
-H "Content-Type: application/json" \
-d '{
"model": "从 /v1/models 获取的模型 ID",
"input": "请列出三个跨境电商选品原则",
"stream": false
}'Claude Messages
curl https://api.dhhapi.com/v1/messages \
-H "x-api-key: sk-your-api-key" \
-H "anthropic-version: 2023-06-01" \
-H "Content-Type: application/json" \
-d '{
"model": "从 /v1/models 获取的 Claude 模型 ID",
"max_tokens": 1024,
"messages": [
{"role": "user", "content": "你好,请介绍一下自己"}
]
}'使用 SSE 持续接收内容
在 Chat Completions、Responses 或 Messages 请求中设置 "stream": true。客户端应逐行读取 data: 事件,不要等待整个响应结束。
curl -N https://api.dhhapi.com/v1/chat/completions \
-H "Authorization: Bearer sk-your-api-key" \
-H "Content-Type: application/json" \
-d '{
"model": "从 /v1/models 获取的模型 ID",
"messages": [{"role": "user", "content": "写一段产品介绍"}],
"stream": true
}'关闭响应缓冲,读取超时建议至少 120 秒。流中断后不要盲目重放有副作用的请求;可记录自己的业务请求 ID 做去重。
把文字和图片放在同一条消息中
图片理解使用支持视觉能力的对话模型,而不是 /v1/images/* 生图接口。图片可以是公网 HTTPS URL,也可以是完整的 Data URL。
使用公网图片 URL
curl https://api.dhhapi.com/v1/chat/completions \
-H "Authorization: Bearer sk-your-api-key" \
-H "Content-Type: application/json" \
-d '{
"model": "支持视觉的模型 ID",
"messages": [{
"role": "user",
"content": [
{"type": "text", "text": "请识别图片中的商品,并输出中文卖点。"},
{
"type": "image_url",
"image_url": {"url": "https://example.com/product.jpg"}
}
]
}]
}'使用本地图片转 Base64
# PowerShell:先生成完整 Data URL
$base64 = [Convert]::ToBase64String(
[IO.File]::ReadAllBytes("C:\images\product.jpg")
)
$imageUrl = "data:image/jpeg;base64,$base64"
# 将 $imageUrl 填入上方 image_url.url 字段确认 content 是数组、图片项类型为 image_url,Data URL 含正确 MIME 前缀,并选择真正支持视觉输入的模型。仅传裸 Base64 字符串通常无法识别。
生成新图、参考图和本地图片编辑
生图能力只对 OpenAI 或 Grok 类型的分组开放。模型名称、尺寸和并发能力以 /v1/models 与后台渠道配置为准。
文字生成图片
curl https://api.dhhapi.com/v1/images/generations \
-H "Authorization: Bearer sk-your-api-key" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-2",
"prompt": "电商主图:白色背景上的蓝色旅行箱,棚拍光线",
"size": "1024x1024",
"n": 1,
"response_format": "b64_json"
}'上传本地图片进行编辑
curl https://api.dhhapi.com/v1/images/edits \
-H "Authorization: Bearer sk-your-api-key" \
-F "model=gpt-image-2" \
-F "prompt=保留主体,把背景改成海边日落" \
-F "image=@C:\images\product.png" \
-F "size=1024x1024" \
-F "n=1"使用图片 URL 编辑
curl https://api.dhhapi.com/v1/images/edits \
-H "Authorization: Bearer sk-your-api-key" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-2",
"prompt": "把背景改成干净的摄影棚,并保留产品文字",
"images": [
{"image_url": "https://example.com/input.png"}
],
"size": "1024x1024"
}'model必须是密钥分组可用的生图模型gpt-image-2prompt生成或编辑要求,建议写清主体、背景、构图和文字字符串imagemultipart 本地文件;多图可使用 image[]PNG/JPEG/WebPimagesJSON 编辑请求中的图片 URL 数组image_urlsize输出尺寸,具体可用值取决于模型1024x1024n单次输出数量;越大越占用并发和额度1response_format返回 Base64 或由上游返回图片 URLb64_json本地上传采用 multipart/form-data,单个上传部分最大 20 MB。不要手工设置 multipart 的 boundary,让 curl 或 SDK 自动生成。
避免长任务被代理超时中断
异步端点适合耗时较长的生图和图片编辑。该功能只有在管理员已开启并配置对象存储时可用,否则会返回 404。
提交任务
curl -i https://api.dhhapi.com/v1/images/generations/async \
-H "Authorization: Bearer sk-your-api-key" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-2",
"prompt": "一座暴风雪中的灯塔",
"size": "1536x1024"
}'成功提交返回 202 Accepted、task_id、poll_url 和建议轮询间隔。
查询任务
curl https://api.dhhapi.com/v1/images/tasks/imgtask_xxx \
-H "Authorization: Bearer sk-your-api-key"必须使用提交任务时的同一把 API 密钥轮询。建议每 3 秒查询一次;任务及结果默认保留 24 小时,单个任务最长执行 30 分钟。
只需要替换 Base URL 和 API Key
Python · OpenAI SDK
from openai import OpenAI
client = OpenAI(
api_key="sk-your-api-key",
base_url="https://api.dhhapi.com/v1",
timeout=300.0,
)
response = client.chat.completions.create(
model="从 /v1/models 获取的模型 ID",
messages=[{"role": "user", "content": "你好"}],
)
print(response.choices[0].message.content)Node.js · OpenAI SDK
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.DHH_API_KEY,
baseURL: "https://api.dhhapi.com/v1",
timeout: 300_000,
});
const response = await client.chat.completions.create({
model: "从 /v1/models 获取的模型 ID",
messages: [{ role: "user", content: "你好" }],
});
console.log(response.choices[0].message.content);Python · Anthropic SDK
from anthropic import Anthropic
client = Anthropic(
api_key="sk-your-api-key",
base_url="https://api.dhhapi.com",
timeout=300.0,
)
message = client.messages.create(
model="从 /v1/models 获取的 Claude 模型 ID",
max_tokens=1024,
messages=[{"role": "user", "content": "你好"}],
)
print(message.content[0].text)先看 HTTP 状态,再看错误对象
错误响应通常包含 error.type、error.code 和 error.message。不要只判断文字内容,也不要把上游错误统一当成“密钥失效”。
400请求参数错误检查 JSON、字段类型、模型 ID,以及是否把 API Key 放进了 URL 查询参数。
401认证失败API Key 缺失、错误、被禁用,或关联用户不可用。
402余额不足账户余额、订阅额度或密钥额度不足。
403访问被拒绝可能是 IP 限制、分组无权访问,或上游地区/账号策略拒绝。
404端点或能力不可用模型、渠道或功能未开启;异步生图未配置对象存储时也会返回 404。
413请求体过大压缩输入图片、减少图片数量,或改用图片 URL。
429请求过快超过用户、密钥、分组或上游并发限制;请降低并发并指数退避。
5xx服务或上游异常保留响应中的 request_id,稍后重试;持续失败时联系技术支持。
这是上游账号或出口网络所在地区不受支持,不是 JSON 格式错误。应检查上游账号地区和合规网络环境,不能通过反复重试解决。
稳定接入建议
并发同时受用户、API 密钥、分组和上游账号限制;“无限制”不等于上游无限容量。
文字请求建议 120 秒,图片与视频建议 300–600 秒;超长生图优先使用异步任务。
仅对 429、502、503、504 使用指数退避,并增加随机抖动;400、401、403 不应自动重试。
每个应用使用独立密钥,定期轮换;服务端保存,发现泄露立即禁用并重建。
推荐退避:1s → 2s → 4s → 8s(每次增加 0–500ms 随机抖动)
建议最大重试:3–5 次
生产环境请记录:HTTP 状态、error.code、error.message、request_id、model需要协助时,请提供请求时间、接口路径、模型 ID、HTTP 状态和脱敏后的错误响应。请勿发送完整 API Key。
