接口文档
Geek API 提供与 OpenAI API 兼容的模型调用接口。本页介绍 API Key 认证、模型查询、文本生成、流式响应、图像生成、异步图像生成、图像编辑及常见错误处理。
模型和可用能力可能随服务配置变化,调用前请使用
GET /v1/models查询当前 API Key 可访问的模型。
接入信息
| 配置项 | 值 |
|---|---|
| API 根地址 | https://geekapi.cc |
| OpenAI 兼容 Base URL | https://geekapi.cc/v1 |
| 认证方式 | Authorization: Bearer <API_KEY> |
| 请求格式 | application/json,图像编辑除外 |
| 字符编码 | UTF-8 |
基本连通性测试
下面的 curl 命令仅用于快速验证 API Key 和服务连通性,并通过 jq 格式化响应,不代表应用集成方式:
export GEEK_API_KEY="sk-请替换为实际值"
curl "https://geekapi.cc/v1/models" \
-H "Authorization: Bearer $GEEK_API_KEY" \
| jq .不要把真实 API Key 写入代码仓库、截图、日志、浏览器前端代码或公开文档。API Key 泄露后,应立即在 Geek API 控制台禁用旧 API Key 并创建新的 API Key。
API Key 与分组
每枚 API Key 都会绑定一个模型分组。OpenAI 文本分组、OpenAI 生图分组和 Grok 分组使用各自的 API Key;同一枚 API Key 只能访问所属分组允许的模型和能力。
典型用法如下:
- 文本模型请求使用 OpenAI 文本分组的 API Key。
gpt-image-*图像请求使用 OpenAI 生图分组的 API Key。- Grok 模型请求使用 Grok 分组的 API Key。
- 如果返回模型不可用、平台不支持或分组不可用,应先检查 API Key 所属分组,而不是反复更换接口路径。
查询可用模型
请求
GET /v1/models HTTP/1.1
Host: geekapi.cc
Authorization: Bearer <API_KEY>响应结构
客户端应依赖顶层 data 数组以及每个模型项的 id。OpenAI 文本分组、OpenAI 生图分组和 Grok 分组会返回不同的扩展字段。
最小兼容结构如下:
{
"data": [
{
"id": "gpt-5.6"
}
]
}可选扩展字段
OpenAI 文本分组和 OpenAI 生图分组的模型项可能包含以下扩展字段:
{
"data": [
{
"id": "gpt-5.6",
"object": "model",
"created": 1780876800,
"owned_by": "openai",
"type": "model",
"display_name": "GPT-5.6 (Sol)"
}
],
"object": "list"
}Grok 分组的模型项还可能带有推理强度配置:
{
"data": [
{
"id": "grok-4.5",
"object": "model",
"owned_by": "xai",
"display_name": "Grok 4.5",
"supportsReasoningEffort": true,
"reasoningEffort": "high",
"reasoningEfforts": [
{ "value": "low", "label": "Low" },
{ "value": "medium", "label": "Medium" },
{ "value": "high", "label": "High", "default": true }
]
}
],
"object": "list"
}字段说明:
| 字段 | 类型 | 是否固定 | 说明 |
|---|---|---|---|
data | array | 是 | 当前 API Key 可使用的模型列表 |
data[].id | string | 是 | 调用模型接口时传入的模型 ID |
object | string | 否 | 顶层列表类型,常见值为 list |
data[].object | string | 否 | 模型对象类型,常见值为 model |
data[].display_name | string | 否 | 面向用户展示的模型名称 |
data[].owned_by | string | 否 | 模型提供方标识,例如 openai 或 xai |
data[].type | string | 否 | 模型类型;部分分组当前返回 model |
data[].created | integer | 否 | 部分 OpenAI 文本分组和 OpenAI 生图分组返回的 Unix 秒级时间戳 |
data[].supportsReasoningEffort | boolean | 否 | 是否支持选择推理强度 |
data[].reasoningEffort | string | 否 | 默认推理强度 |
data[].reasoningEfforts | array | 否 | 可选推理强度及其展示名称 |
客户端应以 data[].id 作为调用模型时的实际取值,并忽略无法识别的扩展字段。不要根据 owned_by、type 或 created 是否存在来判断模型是否可用。
可用模型示例
不同分组的 API Key 返回不同的模型,以下列表仅供参考。
OpenAI 文本分组
gpt-5.6gpt-5.6-solgpt-5.6-terragpt-5.6-lunagpt-5.5gpt-5.4-minicodex-auto-reviewgpt-5.4-2026-03-05
OpenAI 生图分组
gpt-image-1gpt-image-1.5gpt-image-2
Grok 分组
grok-4.5grok-composer-2.5-fast
不要把本页列出的模型永久写死在客户端中。生产应用应定期查询模型列表,或由管理员维护允许使用的模型配置。
文本生成:Chat Completions
接口:
POST /v1/chat/completions这是兼容范围最广的文本生成接口,适用于聊天应用、简单问答和已有 OpenAI SDK 客户端。
非流式请求
POST /v1/chat/completions HTTP/1.1
Host: geekapi.cc
Authorization: Bearer <API_KEY>
Content-Type: application/json
{
"model": "gpt-5.4-mini",
"messages": [
{
"role": "system",
"content": "你是一个回答简洁的中文助手。"
},
{
"role": "user",
"content": "用一句话解释什么是 API。"
}
],
"max_tokens": 256,
"stream": false
}响应示例
以下响应示例已缩短响应 ID 和输出正文:
{
"id": "resp_...",
"object": "chat.completion",
"model": "gpt-5.4-mini",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "API 就是不同软件之间用来请求和传递数据的接口。"
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 28,
"completion_tokens": 21,
"total_tokens": 49
}
}示例中的响应 ID 已省略。实际响应 ID 的格式可能随上游模型变化。
常用参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
model | string | 是 | 模型 ID,应来自当前 API Key 的 /v1/models |
messages | array | 是 | 对话消息数组 |
messages[].role | string | 是 | 常用值:system、user、assistant、tool |
messages[].content | string/array | 是 | 文本或多模态内容块 |
stream | boolean | 否 | 是否返回 SSE 流,默认 false |
max_tokens | integer | 否 | 最大输出 Token;不同模型可能映射为模型自身的输出限制 |
temperature | number | 否 | 随机性参数;部分推理模型可能忽略或限制该参数 |
tools | array | 否 | 函数工具定义 |
tool_choice | string/object | 否 | 控制是否以及如何调用工具 |
流式请求
POST /v1/chat/completions HTTP/1.1
Host: geekapi.cc
Authorization: Bearer <API_KEY>
Content-Type: application/json
{
"model": "gpt-5.4-mini",
"messages": [
{"role": "user", "content": "列出三个 API Key 安全建议。"}
],
"stream": true
}流式响应使用 Server-Sent Events。客户端应逐行处理以 data: 开头的事件,并在收到 [DONE] 后结束读取。
流式响应头为 Content-Type: text/event-stream,末尾事件如下:
data: {"object":"chat.completion.chunk","choices":[],"usage":{"prompt_tokens":15,"completion_tokens":192,"total_tokens":207}}
data: [DONE]Grok 兼容调用
Grok 分组同样使用 Chat Completions 接口:
POST /v1/chat/completions HTTP/1.1
Host: geekapi.cc
Authorization: Bearer <API_KEY>
Content-Type: application/json
{
"model": "grok-composer-2.5-fast",
"messages": [
{"role": "user", "content": "只回复 OK"}
],
"max_tokens": 32,
"stream": false
}服务端可能根据分组配置映射模型。例如,请求 grok-composer-2.5-fast 时,响应中的实际 model 可能为 grok-4.5;计费和日志应以响应中的实际模型及控制台记录为准。
对于推理模型,不要假定 max_tokens 能严格限制隐藏推理 Token 或最终计费用量。请同时设置 API Key 额度并监控响应中的 usage。
文本生成:Responses API
接口:
POST /v1/responsesResponses API 更适合新的 Agent、工具调用和统一多模态输入场景。对于只需要传统聊天格式的客户端,继续使用 Chat Completions 即可。
非流式请求
POST /v1/responses HTTP/1.1
Host: geekapi.cc
Authorization: Bearer <API_KEY>
Content-Type: application/json
{
"model": "gpt-5.4-mini",
"instructions": "请使用简体中文简洁回答。",
"input": "什么是流式响应?",
"max_output_tokens": 256,
"stream": false
}响应示例
{
"id": "resp_...",
"object": "response",
"status": "completed",
"model": "gpt-5.4-mini-2026-03-17",
"output": [
{
"type": "message",
"role": "assistant",
"content": [
{
"type": "output_text",
"text": "流式响应是在内容生成过程中分段返回结果,让客户端无需等待完整响应。"
}
]
}
]
}以上响应示例已缩短响应 ID 和输出正文。
最终文本位于 output[].content[] 中 type=output_text 的 text 字段。
流式 Responses
POST /v1/responses HTTP/1.1
Host: geekapi.cc
Authorization: Bearer <API_KEY>
Content-Type: application/json
{
"model": "gpt-5.4-mini",
"input": "介绍 Geek API 的三个使用场景。",
"stream": true
}客户端应根据事件的 type 字段处理增量文本、工具调用和完成事件,不应假设所有事件都包含文本。
流式响应头为 Content-Type: text/event-stream,事件顺序包含:
response.created
response.in_progress
response.output_item.added
response.content_part.added
response.output_text.delta
response.output_text.done
response.content_part.done
response.output_item.done
response.completed增量文本位于 response.output_text.delta 事件的 delta 字段,收到 response.completed 后结束读取。
图像生成
接口:
POST /v1/images/generations调用前必须使用 OpenAI 生图分组的 API Key,并通过 /v1/models 确认该 API Key 可以看到 gpt-image-* 模型。
生成一张图片
POST /v1/images/generations HTTP/1.1
Host: geekapi.cc
Authorization: Bearer <API_KEY>
Content-Type: application/json
{
"model": "gpt-image-1",
"prompt": "极简风格的蓝色圆形图标,纯白背景,不包含文字",
"size": "1024x1024",
"quality": "low",
"n": 1,
"response_format": "b64_json",
"output_format": "png"
}返回图片位于 data[0].b64_json。客户端应将该字段按 Base64 解码,并根据 output_format 保存为对应图片格式。
响应结构
{
"created": 1785575638,
"background": "auto",
"data": [
{
"b64_json": "iVBORw0KGgoAAA...",
"revised_prompt": "..."
}
],
"output_format": "png",
"quality": "auto",
"size": "1254x1254",
"usage": {
"input_tokens": 49,
"output_tokens": 229,
"total_tokens": 278
}
}服务端或上游模型可能规范化 size 和 quality。例如,请求 size=1024x1024 和 quality=low 时,响应可能为 size=1254x1254 和 quality=auto。客户端应以响应字段和实际图片尺寸为准。
常用图像生成参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
model | string | 是 | 当前可用的 gpt-image-* 模型 |
prompt | string | 是 | 图片描述 |
size | string | 否 | 请求尺寸,例如 1024x1024;最终尺寸以响应和图片文件为准 |
quality | string | 否 | 常见值包括 low、medium、high 或 auto;服务端可能规范化该值 |
n | integer | 否 | 生成数量,建议从 1 开始 |
response_format | string | 否 | 当前推荐使用 b64_json |
output_format | string | 否 | 常见值:png、jpeg、webp,以模型支持为准 |
background | string | 否 | 可选背景模式,如 transparent;需要模型支持 |
图片响应可能达到数 MB。不要把完整 Base64 内容写入应用日志、错误上报或数据库普通文本字段;应尽快解码成文件或上传到对象存储。
异步图像生成
接口:
POST /v1/images/generations/async异步图像生成适合在服务端、工作流或自动化任务中使用。提交接口会快速返回任务信息,客户端随后通过轮询接口查询任务状态;图片生成完成后,结果中返回图片 URL,而不是大块 b64_json。
调用前必须使用具备生图权限的 API Key,并通过 /v1/models 确认该 API Key 可以看到准备调用的图像模型。OpenAI 生图分组通常使用 gpt-image-* 模型;如果管理员配置了其他支持生图的平台,也应以 /v1/models 返回结果为准。
提交异步任务
POST /v1/images/generations/async HTTP/1.1
Host: geekapi.cc
Authorization: Bearer <API_KEY>
Content-Type: application/json
{
"model": "gpt-image-1",
"prompt": "A clean product photo of a glass teapot on a wooden table",
"size": "1024x1024"
}也可以使用 curl 快速验证:
export GEEK_API_KEY="sk-请替换为实际值"
curl -i "https://geekapi.cc/v1/images/generations/async" \
-H "Authorization: Bearer ${GEEK_API_KEY}" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-1",
"prompt": "A clean product photo of a glass teapot on a wooden table",
"size": "1024x1024"
}'提交成功时通常返回 HTTP 202,并带有轮询地址和建议等待时间:
HTTP/2 202
Location: /v1/images/tasks/imgtask_xxx
Retry-After: 3
Cache-Control: no-store响应体示例:
{
"id": "imgtask_xxx",
"object": "image.generation.task",
"task_id": "imgtask_xxx",
"status": "processing",
"poll_url": "/v1/images/tasks/imgtask_xxx",
"created_at": 1788275359,
"expires_at": 1788361759
}字段说明:
| 字段 | 类型 | 说明 |
|---|---|---|
id | string | 任务 ID,通常与 task_id 相同 |
task_id | string | 查询任务状态时使用的任务 ID |
object | string | 对象类型,常见值为 image.generation.task |
status | string | 当前任务状态,常见值为 processing、completed、failed |
poll_url | string | 轮询地址;这是相对路径,需要拼接同一个 API 域名 |
created_at | integer | 任务创建时间,Unix 秒级时间戳 |
expires_at | integer | 任务过期时间,Unix 秒级时间戳;过期后可能无法继续查询或下载 |
轮询任务结果
接口:
GET /v1/images/tasks/{task_id}轮询接口只支持 GET。如果误用 POST /v1/images/tasks/{task_id},可能得到普通路由层的 404 page not found;这表示请求方法不匹配,不代表任务已经失败。
TASK_ID="imgtask_xxx"
curl -i "https://geekapi.cc/v1/images/tasks/${TASK_ID}" \
-H "Authorization: Bearer ${GEEK_API_KEY}"处理中响应示例:
{
"id": "imgtask_xxx",
"object": "image.generation.task",
"task_id": "imgtask_xxx",
"status": "processing",
"poll_url": "/v1/images/tasks/imgtask_xxx",
"created_at": 1788275359,
"expires_at": 1788361759
}完成响应示例:
{
"id": "imgtask_xxx",
"object": "image.generation.task",
"task_id": "imgtask_xxx",
"status": "completed",
"http_status": 200,
"image_url": "https://example.com/path/to/image.png",
"result": {
"data": [
{
"url": "https://example.com/path/to/image.png"
}
]
}
}失败响应示例:
{
"id": "imgtask_xxx",
"object": "image.generation.task",
"task_id": "imgtask_xxx",
"status": "failed",
"http_status": 400,
"error": {
"message": "Image generation is not enabled for this group",
"type": "permission_error"
}
}客户端处理建议:
- 使用提交任务时的同一个 API Key 轮询;换 Key 查询同一个
task_id会返回404 image task not found,这是预期的任务所有权隔离。 poll_url是相对路径,应拼接到同一个域名,例如https://geekapi.cc/v1/images/tasks/{task_id}。- 优先按响应头
Retry-After控制轮询间隔;没有该响应头时,建议每 3 秒查询一次,并设置总超时时间。 completed状态下优先读取image_url,也可以兼容读取result.data[0].url。- 异步结果不应返回大块
b64_json;客户端应下载image_url,或把该 URL 交给后续业务流程处理。 - 图片 URL 可能有有效期,应在
expires_at前完成下载、转存或展示。
一键验收脚本
下面的脚本会提交任务、轮询结果,并在完成后检查图片 URL 的响应头:
#!/usr/bin/env bash
set -euo pipefail
BASE="${BASE:-https://geekapi.cc}"
API_KEY="${API_KEY:?请先 export API_KEY=sk-...}"
submit=$(curl -sS "${BASE}/v1/images/generations/async" \
-H "Authorization: Bearer ${API_KEY}" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-1",
"prompt": "A small robot painting a sunrise, studio lighting",
"size": "1024x1024"
}')
echo "${submit}" | jq .
task_id=$(echo "${submit}" | jq -r '.task_id // .id')
if [[ -z "${task_id}" || "${task_id}" == "null" ]]; then
echo "missing task_id in submit response"
exit 1
fi
for i in {1..120}; do
result=$(curl -sS "${BASE}/v1/images/tasks/${task_id}" \
-H "Authorization: Bearer ${API_KEY}")
status=$(echo "${result}" | jq -r '.status')
echo "[${i}] status=${status}"
if [[ "${status}" == "completed" ]]; then
echo "${result}" | jq .
image_url=$(echo "${result}" | jq -r '.image_url // .result.data[0].url')
echo "image_url=${image_url}"
curl -I "${image_url}"
exit 0
fi
if [[ "${status}" == "failed" ]]; then
echo "${result}" | jq .
exit 1
fi
sleep 3
done
echo "timeout waiting for image task"
exit 1重点验收项:
POST /v1/images/generations/async很快返回202,不会等图片生成完成。GET /v1/images/tasks/{task_id}能从processing变为completed或failed。- 成功结果里有
image_url或result.data[].url,且没有完整b64_json。 - 图片 URL 能打开,
curl -I返回200或对象存储签名 URL 的正常响应。 - 使用另一枚 API Key 查询同一个
task_id时,应该返回404 image task not found。
常见排查
| 现象或错误 | 说明与处理方式 |
|---|---|
POST /v1/images/tasks/{task_id} 返回 404 page not found | 轮询接口请求方法错了;改用 GET /v1/images/tasks/{task_id} |
JSON 错误为 image task not found | 任务不存在、已过期,或不是使用提交任务时的同一枚 API Key 查询 |
async image tasks are not enabled | 异步任务或对象存储配置未启用,请联系管理员检查服务端配置 |
Images API is not supported for this platform | 当前 API Key 所属平台不支持 Images API,请更换具备生图权限的分组或模型 |
一直停留在 processing | 按 Retry-After 或 3 秒间隔继续轮询;超过业务超时时间后记录 X-Request-ID 排查 |
图像编辑
接口:
POST /v1/images/edits图像编辑使用 multipart/form-data 上传源图片。
| 表单字段 | 类型 | 必填 | 示例或说明 |
|---|---|---|---|
model | string | 是 | gpt-image-1 |
prompt | string | 是 | 保持蓝色圆形主体不变,把背景改为浅灰色,不添加文字 |
image | file | 是 | 待编辑的源图片 |
mask | file | 否 | 可选遮罩图片 |
size | string | 否 | 1024x1024 |
quality | string | 否 | low、medium、high 或 auto |
response_format | string | 否 | 推荐 b64_json |
output_format | string | 否 | png、jpeg 或 webp |
源图、遮罩、输出格式和透明背景能力取决于所选模型。
请求体示例
图像编辑不是 JSON 请求。下面的 -F 参数会组成 multipart/form-data 请求体:
export GEEK_API_KEY="sk-请替换为实际值"
curl "https://geekapi.cc/v1/images/edits" \
-H "Authorization: Bearer ${GEEK_API_KEY}" \
-F "model=gpt-image-1" \
-F "prompt=保持蓝色圆形主体不变,把背景改为浅灰色,不添加文字" \
-F "image=@./source.png;type=image/png" \
-F "size=1024x1024" \
-F "quality=medium" \
-F "response_format=b64_json" \
-F "output_format=png"如果需要使用遮罩,在请求中追加:
-F "mask=@./mask.png;type=image/png"不要手动设置 Content-Type 的 boundary;curl 会根据 -F 参数自动生成正确的 multipart/form-data 请求头和分隔符。
成功响应体示例
{
"created": 1785575638,
"background": "auto",
"data": [
{
"b64_json": "iVBORw0KGgoAAA...",
"revised_prompt": "保持蓝色圆形主体不变,将背景调整为浅灰色,不添加文字。"
}
],
"output_format": "png",
"quality": "medium",
"size": "1024x1024",
"usage": {
"input_tokens": 92,
"output_tokens": 231,
"total_tokens": 323
}
}响应结构与同步图像生成一致。示例中的 b64_json 已截断;客户端应将完整值按 Base64 解码并保存为 output_format 指定的图片格式。服务端可能规范化 quality 和 size,应以响应字段及实际图片为准。
错误响应体示例
缺少 image 文件时返回:
HTTP/2 400{
"error": {
"message": "image file is required",
"type": "invalid_request_error"
}
}目前图像编辑接口为同步接口;如需长耗时任务编排,请在业务侧封装队列并调用同步 /v1/images/edits。
请求追踪
Geek API 响应包含 X-Request-ID。客户端即使主动传入 X-Client-Request-ID,服务端也可能生成新的值而不原样保留,因此排查问题时应记录响应中的 X-Request-ID。
出现错误时,应向管理员提供以下信息:
- 请求时间和时区;
X-Request-ID;- 接口路径和 HTTP 状态码;
- 模型 ID;
- 已脱敏的请求参数;
- 错误响应正文。
不要提供完整的 API Key、Base64 图片、用户隐私内容或未脱敏的业务数据。
常见错误
未提供 API Key
HTTP/2 401{
"code": "API_KEY_REQUIRED",
"message": "API key is required in Authorization header (Bearer scheme), x-api-key header, or x-goog-api-key header"
}处理方法:检查 Authorization 是否为 Bearer <API_KEY>,并确认环境变量已正确展开。
API Key 无效或已禁用
使用无效 API Key 时返回:
HTTP/2 401{
"code": "INVALID_API_KEY",
"message": "Invalid API key"
}可能原因包括:API Key 输入错误、已删除、已禁用或已过期。应在 Geek API 控制台检查 API Key 状态,不要不断重试同一个失败请求。
模型不在当前分组
使用 OpenAI 文本分组的 API Key 在 Chat Completions 接口请求图像模型时返回 400:
{
"error": {
"message": "This model is not supported on the Chat Completions endpoint",
"type": "invalid_request_error"
}
}先使用相同的 API Key 请求 /v1/models。如果目标模型不在列表中,应更换具有对应分组权限的 API Key,或联系管理员调整分组。
图像生成接口不支持当前分组
使用 OpenAI 文本分组的 API Key 请求图像生成接口时返回 403:
{
"error": {
"message": "Image generation is not enabled for this group",
"type": "permission_error"
}
}请改用 OpenAI 生图分组的 API Key。
速率限制
遇到 HTTP 429 时,应读取响应中的错误信息和重试提示,采用指数退避,避免立即高并发重试:
1 秒 → 2 秒 → 4 秒 → 8 秒服务暂时不可用
HTTP 502、503 或 504 通常表示服务暂时不可用或请求超时。应记录 X-Request-ID 并有限次重试;对于不可幂等的业务操作,应先确认服务端是否已经产生结果。