Skip to content

接口文档 ​

Geek API 提供与 OpenAI API 兼容的模型调用接口。本页介绍 API Key 认证、模型查询、文本生成、流式响应、图像生成、异步图像生成、图像编辑及常见错误处理。

模型和可用能力可能随服务配置变化,调用前请使用 GET /v1/models 查询当前 API Key 可访问的模型。

接入信息 ​

配置项值
API 根地址https://geekapi.cc
OpenAI 兼容 Base URLhttps://geekapi.cc/v1
认证方式Authorization: Bearer <API_KEY>
请求格式application/json,图像编辑除外
字符编码UTF-8

基本连通性测试 ​

下面的 curl 命令仅用于快速验证 API Key 和服务连通性,并通过 jq 格式化响应,不代表应用集成方式:

bash
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 所属分组,而不是反复更换接口路径。

查询可用模型 ​

请求 ​

http
GET /v1/models HTTP/1.1
Host: geekapi.cc
Authorization: Bearer <API_KEY>

响应结构 ​

客户端应依赖顶层 data 数组以及每个模型项的 id。OpenAI 文本分组、OpenAI 生图分组和 Grok 分组会返回不同的扩展字段。

最小兼容结构如下:

json
{
  "data": [
    {
      "id": "gpt-5.6"
    }
  ]
}

可选扩展字段 ​

OpenAI 文本分组和 OpenAI 生图分组的模型项可能包含以下扩展字段:

json
{
  "data": [
    {
      "id": "gpt-5.6",
      "object": "model",
      "created": 1780876800,
      "owned_by": "openai",
      "type": "model",
      "display_name": "GPT-5.6 (Sol)"
    }
  ],
  "object": "list"
}

Grok 分组的模型项还可能带有推理强度配置:

json
{
  "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"
}

字段说明:

字段类型是否固定说明
dataarray是当前 API Key 可使用的模型列表
data[].idstring是调用模型接口时传入的模型 ID
objectstring否顶层列表类型,常见值为 list
data[].objectstring否模型对象类型,常见值为 model
data[].display_namestring否面向用户展示的模型名称
data[].owned_bystring否模型提供方标识,例如 openai 或 xai
data[].typestring否模型类型;部分分组当前返回 model
data[].createdinteger否部分 OpenAI 文本分组和 OpenAI 生图分组返回的 Unix 秒级时间戳
data[].supportsReasoningEffortboolean否是否支持选择推理强度
data[].reasoningEffortstring否默认推理强度
data[].reasoningEffortsarray否可选推理强度及其展示名称

客户端应以 data[].id 作为调用模型时的实际取值,并忽略无法识别的扩展字段。不要根据 owned_by、type 或 created 是否存在来判断模型是否可用。

可用模型示例 ​

不同分组的 API Key 返回不同的模型,以下列表仅供参考。

OpenAI 文本分组

  • gpt-5.6
  • gpt-5.6-sol
  • gpt-5.6-terra
  • gpt-5.6-luna
  • gpt-5.5
  • gpt-5.4-mini
  • codex-auto-review
  • gpt-5.4-2026-03-05

OpenAI 生图分组

  • gpt-image-1
  • gpt-image-1.5
  • gpt-image-2

Grok 分组

  • grok-4.5
  • grok-composer-2.5-fast

不要把本页列出的模型永久写死在客户端中。生产应用应定期查询模型列表,或由管理员维护允许使用的模型配置。

文本生成:Chat Completions ​

接口:

text
POST /v1/chat/completions

这是兼容范围最广的文本生成接口,适用于聊天应用、简单问答和已有 OpenAI SDK 客户端。

非流式请求 ​

http
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 和输出正文:

json
{
  "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 的格式可能随上游模型变化。

常用参数 ​

参数类型必填说明
modelstring是模型 ID,应来自当前 API Key 的 /v1/models
messagesarray是对话消息数组
messages[].rolestring是常用值:system、user、assistant、tool
messages[].contentstring/array是文本或多模态内容块
streamboolean否是否返回 SSE 流,默认 false
max_tokensinteger否最大输出 Token;不同模型可能映射为模型自身的输出限制
temperaturenumber否随机性参数;部分推理模型可能忽略或限制该参数
toolsarray否函数工具定义
tool_choicestring/object否控制是否以及如何调用工具

流式请求 ​

http
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,末尾事件如下:

text
data: {"object":"chat.completion.chunk","choices":[],"usage":{"prompt_tokens":15,"completion_tokens":192,"total_tokens":207}}

data: [DONE]

Grok 兼容调用 ​

Grok 分组同样使用 Chat Completions 接口:

http
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 ​

接口:

text
POST /v1/responses

Responses API 更适合新的 Agent、工具调用和统一多模态输入场景。对于只需要传统聊天格式的客户端,继续使用 Chat Completions 即可。

非流式请求 ​

http
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
}

响应示例 ​

json
{
  "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 ​

http
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,事件顺序包含:

text
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 后结束读取。

图像生成 ​

接口:

text
POST /v1/images/generations

调用前必须使用 OpenAI 生图分组的 API Key,并通过 /v1/models 确认该 API Key 可以看到 gpt-image-* 模型。

生成一张图片 ​

http
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 保存为对应图片格式。

响应结构 ​

json
{
  "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。客户端应以响应字段和实际图片尺寸为准。

常用图像生成参数 ​

参数类型必填说明
modelstring是当前可用的 gpt-image-* 模型
promptstring是图片描述
sizestring否请求尺寸,例如 1024x1024;最终尺寸以响应和图片文件为准
qualitystring否常见值包括 low、medium、high 或 auto;服务端可能规范化该值
ninteger否生成数量,建议从 1 开始
response_formatstring否当前推荐使用 b64_json
output_formatstring否常见值:png、jpeg、webp,以模型支持为准
backgroundstring否可选背景模式,如 transparent;需要模型支持

图片响应可能达到数 MB。不要把完整 Base64 内容写入应用日志、错误上报或数据库普通文本字段;应尽快解码成文件或上传到对象存储。

异步图像生成 ​

接口:

text
POST /v1/images/generations/async

异步图像生成适合在服务端、工作流或自动化任务中使用。提交接口会快速返回任务信息,客户端随后通过轮询接口查询任务状态;图片生成完成后,结果中返回图片 URL,而不是大块 b64_json。

调用前必须使用具备生图权限的 API Key,并通过 /v1/models 确认该 API Key 可以看到准备调用的图像模型。OpenAI 生图分组通常使用 gpt-image-* 模型;如果管理员配置了其他支持生图的平台,也应以 /v1/models 返回结果为准。

提交异步任务 ​

http
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 快速验证:

bash
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
HTTP/2 202
Location: /v1/images/tasks/imgtask_xxx
Retry-After: 3
Cache-Control: no-store

响应体示例:

json
{
  "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
}

字段说明:

字段类型说明
idstring任务 ID,通常与 task_id 相同
task_idstring查询任务状态时使用的任务 ID
objectstring对象类型,常见值为 image.generation.task
statusstring当前任务状态,常见值为 processing、completed、failed
poll_urlstring轮询地址;这是相对路径,需要拼接同一个 API 域名
created_atinteger任务创建时间,Unix 秒级时间戳
expires_atinteger任务过期时间,Unix 秒级时间戳;过期后可能无法继续查询或下载

轮询任务结果 ​

接口:

text
GET /v1/images/tasks/{task_id}

轮询接口只支持 GET。如果误用 POST /v1/images/tasks/{task_id},可能得到普通路由层的 404 page not found;这表示请求方法不匹配,不代表任务已经失败。

bash
TASK_ID="imgtask_xxx"

curl -i "https://geekapi.cc/v1/images/tasks/${TASK_ID}" \
  -H "Authorization: Bearer ${GEEK_API_KEY}"

处理中响应示例:

json
{
  "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
}

完成响应示例:

json
{
  "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"
      }
    ]
  }
}

失败响应示例:

json
{
  "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 的响应头:

bash
#!/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

重点验收项:

  1. POST /v1/images/generations/async 很快返回 202,不会等图片生成完成。
  2. GET /v1/images/tasks/{task_id} 能从 processing 变为 completed 或 failed。
  3. 成功结果里有 image_url 或 result.data[].url,且没有完整 b64_json。
  4. 图片 URL 能打开,curl -I 返回 200 或对象存储签名 URL 的正常响应。
  5. 使用另一枚 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 排查

图像编辑 ​

接口:

text
POST /v1/images/edits

图像编辑使用 multipart/form-data 上传源图片。

表单字段类型必填示例或说明
modelstring是gpt-image-1
promptstring是保持蓝色圆形主体不变,把背景改为浅灰色,不添加文字
imagefile是待编辑的源图片
maskfile否可选遮罩图片
sizestring否1024x1024
qualitystring否low、medium、high 或 auto
response_formatstring否推荐 b64_json
output_formatstring否png、jpeg 或 webp

源图、遮罩、输出格式和透明背景能力取决于所选模型。

请求体示例 ​

图像编辑不是 JSON 请求。下面的 -F 参数会组成 multipart/form-data 请求体:

bash
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"

如果需要使用遮罩,在请求中追加:

bash
-F "mask=@./mask.png;type=image/png"

不要手动设置 Content-Type 的 boundary;curl 会根据 -F 参数自动生成正确的 multipart/form-data 请求头和分隔符。

成功响应体示例 ​

json
{
  "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
HTTP/2 400
json
{
  "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
HTTP/2 401
json
{
  "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
HTTP/2 401
json
{
  "code": "INVALID_API_KEY",
  "message": "Invalid API key"
}

可能原因包括:API Key 输入错误、已删除、已禁用或已过期。应在 Geek API 控制台检查 API Key 状态,不要不断重试同一个失败请求。

模型不在当前分组 ​

使用 OpenAI 文本分组的 API Key 在 Chat Completions 接口请求图像模型时返回 400:

json
{
  "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:

json
{
  "error": {
    "message": "Image generation is not enabled for this group",
    "type": "permission_error"
  }
}

请改用 OpenAI 生图分组的 API Key。

速率限制 ​

遇到 HTTP 429 时,应读取响应中的错误信息和重试提示,采用指数退避,避免立即高并发重试:

text
1 秒 → 2 秒 → 4 秒 → 8 秒

服务暂时不可用 ​

HTTP 502、503 或 504 通常表示服务暂时不可用或请求超时。应记录 X-Request-ID 并有限次重试;对于不可幂等的业务操作,应先确认服务端是否已经产生结果。

最后更新于: