大航海API
DEVELOPER DOCS

API 接入文档

从创建密钥到文本对话、图片理解、生图和图片编辑,按真实网关能力提供可直接复制的请求示例。

01 · 快速开始

三步完成首次调用

  1. 注册并充值

    完成邮箱验证,按需要充值余额、订阅套餐或兑换额度卡密。

  2. 创建 API 密钥

    进入用户控制台的“API 密钥”,创建并妥善保存以 sk- 开头的密钥。

  3. 查询模型再调用

    先请求 /v1/models 获取真实模型 ID,避免使用未配置的模型名称。

最小可用测试

下面的命令只读取模型列表,不会产生模型推理费用。返回的 data[].id 就是后续请求应填写的模型 ID。

curl https://api.dhhapi.com/v1/models \
  -H "Authorization: Bearer sk-your-api-key"
02 · 地址与认证

Base URL 与请求头

通用 API 域名https://api.dhhapi.com
OpenAI SDK Base URLhttps://api.dhhapi.com/v1
超时建议120–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
不要把 API Key 写成查询参数

?key=...?api_key=... 已被禁用,会直接返回 400。服务端程序应通过请求头传递密钥。

03 · 选择模型

模型名称以实时列表为准

不同 API 密钥可能绑定不同分组,因此可用模型、倍率和能力并不一定相同。不要仅凭第三方教程猜测模型名,也不要把网页显示名称当作模型 ID。

1

调用 GET /v1/models,读取 data[].id

2

模型广场查看模型类型与接口能力。

3

把返回的完整 ID 原样填写到请求的 model 字段。

文本模型不一定支持生图,生图模型也不一定支持图片编辑。接口返回“model not found”或“not supported”时,应先确认密钥分组和模型能力。

04 · 接口总览

当前网关端点

GET/v1/models
获取模型所有分组

返回当前 API 密钥所属分组实际可用的模型 ID。

POST/v1/messages
Claude Messages按分组路由

Claude 原生 Messages API,兼容 Claude SDK 与 Claude Code。

POST/v1/messages/count_tokens
Claude Token 计数按分组路由

预估 Messages 请求所需的输入 Token。

POST/v1/responses
OpenAI Responses按分组路由

OpenAI Responses API,适合 Codex 与新一代 Agent 工作流。

POST/v1/chat/completions
Chat Completions按分组路由

OpenAI Chat Completions 兼容接口,支持文本、流式与图片理解。

POST/v1/embeddings
Embeddings仅 OpenAI 渠道

生成文本向量;模型和渠道必须支持 Embeddings。

POST/v1/images/generations
生成图片OpenAI / Grok

按提示词生成图片,支持 JSON 请求。

POST/v1/images/edits
编辑图片OpenAI / Grok

使用本地图片或图片 URL 进行改图、局部编辑和参考图生成。

POST/v1/images/generations/async
异步生成图片需开启对象存储

提交长耗时生图任务,返回任务 ID 后轮询结果。

GET/v1/images/tasks/{task_id}
查询图片任务需开启对象存储

使用提交任务时的同一把 API 密钥查询状态和结果。

POST/v1/videos/generations
生成视频仅 Grok 渠道

创建视频生成任务。

GET/v1beta/models
Gemini 模型列表Gemini 分组

Gemini SDK/CLI 使用的原生模型列表。

POST/v1beta/models/{model}:generateContent
Gemini 原生生成Gemini 分组

Gemini 原生 generateContent 格式。

兼容端点不代表所有模型都支持

最终能否调用取决于密钥所属分组、后台渠道、模型白名单和上游账号能力。建议上线前分别测试文字、识图和生图请求。

05 · 文本对话

三种常用协议

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": "你好,请介绍一下自己"}
    ]
  }'
06 · 流式输出

使用 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 做去重。

07 · AI 图片理解

把文字和图片放在同一条消息中

图片理解使用支持视觉能力的对话模型,而不是 /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 字符串通常无法识别。

08 · 生图与图片编辑

生成新图、参考图和本地图片编辑

生图能力只对 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-2
prompt生成或编辑要求,建议写清主体、背景、构图和文字字符串
imagemultipart 本地文件;多图可使用 image[]PNG/JPEG/WebP
imagesJSON 编辑请求中的图片 URL 数组image_url
size输出尺寸,具体可用值取决于模型1024x1024
n单次输出数量;越大越占用并发和额度1
response_format返回 Base64 或由上游返回图片 URLb64_json

本地上传采用 multipart/form-data,单个上传部分最大 20 MB。不要手工设置 multipart 的 boundary,让 curl 或 SDK 自动生成。

09 · 异步生图

避免长任务被代理超时中断

异步端点适合耗时较长的生图和图片编辑。该功能只有在管理员已开启并配置对象存储时可用,否则会返回 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 Acceptedtask_idpoll_url 和建议轮询间隔。

查询任务

curl https://api.dhhapi.com/v1/images/tasks/imgtask_xxx \
  -H "Authorization: Bearer sk-your-api-key"
processing继续等待completed读取 result.data[].urlfailed读取 error.message

必须使用提交任务时的同一把 API 密钥轮询。建议每 3 秒查询一次;任务及结果默认保留 24 小时,单个任务最长执行 30 分钟。

10 · SDK 配置

只需要替换 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)
11 · 错误码

先看 HTTP 状态,再看错误对象

错误响应通常包含 error.typeerror.codeerror.message。不要只判断文字内容,也不要把上游错误统一当成“密钥失效”。

400请求参数错误

检查 JSON、字段类型、模型 ID,以及是否把 API Key 放进了 URL 查询参数。

401认证失败

API Key 缺失、错误、被禁用,或关联用户不可用。

402余额不足

账户余额、订阅额度或密钥额度不足。

403访问被拒绝

可能是 IP 限制、分组无权访问,或上游地区/账号策略拒绝。

404端点或能力不可用

模型、渠道或功能未开启;异步生图未配置对象存储时也会返回 404。

413请求体过大

压缩输入图片、减少图片数量,或改用图片 URL。

429请求过快

超过用户、密钥、分组或上游并发限制;请降低并发并指数退避。

5xx服务或上游异常

保留响应中的 request_id,稍后重试;持续失败时联系技术支持。

unsupported_country_region_territory

这是上游账号或出口网络所在地区不受支持,不是 JSON 格式错误。应检查上游账号地区和合规网络环境,不能通过反复重试解决。

12 · 限制与重试

稳定接入建议

并发

并发同时受用户、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。