/v1/chat/completions支持对话交互、工具调用、结构化输出与流式响应,可直接搭配各类官方 SDK 使用。
通过可直接运行的示例快速发起请求,并根据实际业务场景选择最佳接入方案。
export INFERWAY_API_KEY="inferway_live_..." curl 'https://api.inferway.ai/v1/chat/completions' \ -H "Authorization: Bearer $INFERWAY_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "deepseek/deepseek-v4.1-flash-1017", "stream": true, "messages": [ { "role": "user", "content": "Say hello in one short sentence." } ] }'
curl 'https://api.inferway.ai/v1/chat/completions' \
-H "Authorization: Bearer $INFERWAY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek/deepseek-v4.1-flash-1017",
"stream": true,
"messages": [
{
"role": "user",
"content": "Say hello in one short sentence."
}
]
}'非流式请求经由 CDN 网关代理,首字节存在约 100 秒超时限制,长文本生成建议设置 stream=true;短文本补全使用非流式请求完全不受影响。IDE/智能体客户端可以在内部自行选择非流式,而无需暴露任何设置项:Inferway 会将未显式指定上限的非流式请求候选输出总量限制在 4,096 token(且访客若显式传入 max_tokens > 4,096 将被 400 拒绝),并通过 X-Inferway-Max-Tokens-Applied 与 X-Inferway-Max-Tokens-Reason 响应头报告实际应用的单候选上限;客户端支持流式时,更长的输出仍建议使用流式。
https://api.inferway.ai/v1$INFERWAY_API_KEYdeepseek/deepseek-v4.1-flash-1017data: {
"id": "chatcmpl_...",
"object": "chat.completion.chunk",
"model": "deepseek/deepseek-v4.1-flash-1017",
"choices": [
{
"index": 0,
"delta": { "role": "assistant", "content": "Hello" },
"finish_reason": null
}
]
}
data: [DONE]绝大多数初次调用异常通常源自环境或参数配置,在修改业务代码前请先核对以下常见问题。
| 异常现象 | 可能原因 | 排查与修复建议 |
|---|---|---|
| 401 | API Key 缺失、已被吊销、输入有误,或未在当前终端会话中正确 export。 | 前往 控制台 → API 密钥里重新复制一份,重试前先执行 echo $INFERWAY_API_KEY 确认。 |
| 404 | 客户端指向了错误的 Base URL,或把 /v1 拼了两次。 | Base URL 用 https://api.inferway.ai/v1,请求路径 /chat/completions 只写一次。 |
| 429 | 触发了账户额度、匿名试玩限额,或单次请求大小限制。 | 查看错误中的 dimension。单次大小超限请缩短输入或调低 max_tokens;其他限额按响应中的 Retry-After 等待。 |
| 504 / 超时 | 非流式请求的长文本生成耗时超出了 CDN 网关约 100 秒的首字节超时限制。 | 在请求参数中设置 stream=true。 |
# For OpenAI-compatible clients that read OpenAI env vars export OPENAI_API_KEY="$INFERWAY_API_KEY" export OPENAI_BASE_URL='https://api.inferway.ai/v1' export INFERWAY_MODEL='deepseek/deepseek-v4.1-flash-1017'
官方 OpenAI Python SDK 原生支持任何兼容接口。仅需替换 base_url 与 API Key 即可。非流式请求适用于短文本生成;长文本任务建议使用流式传输。
import os from openai import OpenAI client = OpenAI( base_url="https://api.inferway.ai/v1", api_key=os.environ["INFERWAY_API_KEY"], ) resp = client.chat.completions.create( model="deepseek/deepseek-v4.1-flash-1017", messages=[{"role": "user", "content": "Say hello in one short sentence."}], max_tokens=64, ) print(resp.choices[0].message.content)
MCP 端点现已开放。将支持 MCP 规范的客户端配置至下方服务地址,并使用同一把 API Key 进行鉴权即可;工具调用遵循官方标准协议,对话内容同样不落盘。
无可用余额的账户会自动走免费档,而不是收到 402 错误——与 REST API 相同的免费档(90 次/分钟)。注册用户的待遇绝不会低于匿名访客。
{
"mcpServers": {
"inferway": {
"url": "https://api.inferway.ai/v1/mcp/sse",
"headers": {
"Authorization": "Bearer $INFERWAY_API_KEY"
}
}
}
}把业务流量接到 Inferway 之前,建议先看透明度中心,再看服务状态。
OpenAI 兼容路径保持精简、行为确定;账户、账单、用量统计和智能体相关的操作,由一组独立的自有端点提供。
/v1/chat/completions支持对话交互、工具调用、结构化输出与流式响应,可直接搭配各类官方 SDK 使用。
/v1/interactions用于视频生成:提交一次即持久化的后台任务,随后轮询直至成片可取回。
/v1/keys · /v1/billing · /v1/usage · /v1/requests用于服务端的 API 密钥管理、余额与账单查询、用量统计及请求元数据审计。
| 端点路径 | 请求方法 | 功能说明 |
|---|---|---|
| /v1/chat/completions | POST | OpenAI 兼容的对话补全接口 |
| /v1/interactions | POST | 异步视频生成任务(同一路由下的五种操作) |
| /v1/models | GET | 获取已发布模型列表及能力、价格元数据 |
| /v1/mcp/sse · /v1/mcp/messages | GET · POST | MCP 服务协议接入端点(已上线) |
| /v1/keys | GET / POST / DELETE | 管理直连 API 密钥 |
| /v1/billing | GET | 钱包余额与近期用量统计 |
| /v1/billing/transactions | GET | 钱包充值与消费交易明细 |
| /v1/billing/checkout | POST | 创建在线充值收银台会话 |
| /v1/usage | GET | 按时间聚合的 Token 用量统计 |
| /v1/requests | GET | 请求元数据历史明细(不含交互正文) |
| /health | GET | 网关与核心后端健康检查 |
| /v1/stats | GET | 服务聚合统计数据 |
视频生成不会在请求内直接返回成片。所有调用都发往 POST /v1/interactions,并在请求体的 op 字段中指明操作;任务本身持久化,连接中断不会丢失已扣费的工作。
| op 取值 | 功能说明 |
|---|---|
| prepare_upload | 为一张输入图片申请一次性上传凭证:JPEG、PNG 或 WebP,单张不超过 10 MiB。 |
| create | 提交生成任务,返回 interaction ID。下单时按所选时长冻结额度,成片后才扣费,生成失败不收费。 |
| get | 读取持久化状态与当前阶段;成片交付落定后,返回结果及其下载地址。 |
| cancel | 尽力而为地取消排队中或执行中的任务。 |
| list | 按分页和状态过滤查询历史交互任务列表。 |
公开支持的端点是 POST /v1/chat/completions、POST /v1/interactions 和 GET /v1/models。旧版 POST /v1/completions 不提供:它返回 501(未实现),并在错误信息里指明应改用的 chat completions 路由。POST /v1/messages(Anthropic 格式)已提供并对 API key 开放:每个请求都需带 anthropic-version: 2023-06-01 头。
选择模型,查看其已发布的能力事实。API 示例和工具配置会使用同一个模型。
此模型可用充值本金、充值赠金、邀请奖励和反馈奖励支付;注册赠金、运营赠金和历史发放的赠金不能用于此模型。
费用与可用区域见 定价。
Authorization: Bearer $INFERWAY_API_KEY
Inferway 返回 OpenAI 兼容的错误对象:{"error": { "type": "...", "message": "...", "code": "..." }}
付费请求在派发前会预留费用:预估输入 Token × 输入价 + max_tokens × 输出价。运营赠送等赠金只在每个 UTC 日的前 300M tokens 内可用;当天用量超过 300M 后,本金、首充奖励、充值活动奖励、邀请奖励和被采纳的反馈奖励仍可照常使用。可用余额耗尽时,符合条件的请求可使用注册免费额度;免费请求不扣钱包。402 表示请求在派发前被拒绝,不产生费用。已认证请求在派发前被 400 拒绝时,会以零 Token、零费用记录在控制台请求历史中,便于事后排查故障。余额以 4 位小数展示;单价以实时价目表为准。
命中缓存的输入 Token 记在 usage.prompt_tokens_details.cached_tokens 中,按缓存价计费。缓存按整块 Token 匹配,较短的提示词可能完全无法命中,此时全部按标准输入价计费。
/v1/chat/completions 与 /v1/agent/chat 可能返回的全部错误码,直接取自网关自己的目录,不是抄写。每一行都带 HTTP 状态、是否可以安全重试,以及 API 实际发出的原文。结账、账单与密钥管理相关的端点会返回它们各自的错误码,不在本表中。
| 错误码 | HTTP 状态码 | 可否重试 | 错误含义 |
|---|---|---|---|
| account_benefits_restricted | 403 | 不可 | 此账户的免费文本额度暂时受限,不会扣减已充值余额;如需复核请联系支持。 |
| admission_paused | 503 | 可以,先退避 | 服务调整期间暂停接收付费请求,请稍后重试;这个请求本身没有问题。 |
| authentication_error | 401 | 不可 | 身份验证失败。 |
| conflict | 409 | 不可 | 与资源的当前状态冲突。 |
| context_length_exceeded | 400 | 不可 | 提示词超出了模型的上下文窗口。请缩短或压缩对话后重试。 |
| free_quota_exhausted | 429 | 可以,先退避 | 免费额度已用完,请稍后再试。 |
| free_tier_unavailable | 503 | 可以,先退避 | 免费通道暂时不可用,请稍后再试。 |
| internal_error | 500 | 不可 | 网关内部错误 |
| internal_tool_failure | 500 | 不可 | 内部工具出错。 |
| invalid_image_input | 400 | 不可 | The image input was invalid. Check the image rejection code and message. |
| invalid_request | 400 | 不可 | 请求格式错误或参数非法 |
| malformed_upstream | 502 | 不可 | 上游服务返回了无效的响应。 |
| model_unavailable | 503 | 可以,先退避 | 该模型暂停服务,其他模型不受影响,请稍后再试。 |
| payment_required | 402 | 不可 | 余额不足,请到控制台的「账单与钱包」页充值。 |
| playground_allowance_exhausted | 402 | 不可 | Your daily Playground allowance is used up. Top up at https://inferway.ai/console/billing to continue, or try again after 00:00 UTC. |
| promotional_credit_not_supported | 402 | 不可 | 此模型可用充值本金、充值赠金、邀请奖励和反馈奖励支付,不能使用注册赠金、运营赠金和历史发放的赠金。充值后即可使用。 |
| rate_limited | 429 | 可以,先退避 | 超出速率限制或并发限额 |
| service_unavailable | 503 | 不可 | 服务出现故障,实时状态见 inferway.ai/status。 |
| upstream_rejected | 422 | 不可 | 上游服务拒绝了这个请求。 |
| upstream_timeout | 504 | 可以,先退避 | 上游服务响应超时,请重试。 |
| upstream_unavailable | 503 | 可以,先退避 | 服务暂时不可用。 |
此模型适用单独的免费用量限制。达到限额时,请根据响应中的错误说明和重试提示处理。
以下清单如实列出了网关对各项参数的实际支持情况,反映线上运行时的真实处理逻辑。
| 参数 | 支持状态 | 具体行为 |
|---|---|---|
| model | 支持 | 转发前会重写成后端的模型 ID。 |
| messages | 支持 | 必填且非空,校验后转发给推理引擎。 |
| stream | 支持 | 流式路径已实现;自动注入 stream_options.include_usage。 |
| temperature | 支持 | 透传给推理引擎,并记入计费元数据。 |
| top_p | 支持 | 列于 supported_sampling_parameters,整体透传。 |
| max_tokens | 支持 | 透传给推理引擎。 |
| stop | 支持 | 列于 supported_sampling_parameters,转发给推理引擎。 |
| n | 未验证 | 通过 n 和 best_of 限制在 1..8 个候选响应;钱包余额预留金额随候选数成倍计算。实际候选由下游引擎生成。 |
| logprobs | 未验证 | 网关不做处理,随原始请求体转发,未对线上响应做过验证。 |
| tools | 支持 | supported_features 中声明 ["tools"],转发给推理引擎。 |
| response_format | 未验证 | 此模型的目录中未声明该能力。 |
| 图像输入 | 支持 | 模型元数据声明 input_modalities: ["text","image"];仅支持内联 data URL,每请求最多 8 张图片,对话历史中的图片也计入。 |
下面两段最小请求体分别对应两种公开协议,都以内联 base64 / data URL 的形式,把图片发给模型目录中声明了 image_input 的模型。网关在 Playground 里执行的单张图片、单类文件累计字节上限,以及 32 MiB 的请求体上限,在这里同样适用。
下方每个片段同受上方兼容性矩阵图片行的约束:仅内联 data URL,每请求最多 8 张图片;对话历史中的图片也计入。
image_url.url 填一个包含 base64 数据的 data URL,MIME 类型在模型目录允许的范围内即可。
POST https://api.inferway.ai/v1/chat/completions Authorization: Bearer $INFERWAY_API_KEY Content-Type: application/json { "model": "deepseek/deepseek-v4.1-flash-1017", "messages": [ { "role": "user", "content": [ {"type": "text", "text": "What is in this image?"}, { "type": "image_url", "image_url": { "url": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=" } } ] } ] }
Anthropic 使用 base64 source 对象而不是 data URL;网关会把 Anthropic 形态的请求路由到同样的 image_input 通道。Messages 端点需要带 anthropic-version: 2023-06-01 头,详见上方端点说明。
POST https://api.inferway.ai/v1/messages Authorization: Bearer $INFERWAY_API_KEY anthropic-version: 2023-06-01 Content-Type: application/json { "model": "deepseek/deepseek-v4.1-flash-1017", "max_tokens": 1024, "messages": [ { "role": "user", "content": [ {"type": "text", "text": "What is in this image?"}, { "type": "image", "source": { "type": "base64", "media_type": "image/png", "data": "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=" } } ] } ] }
#!/usr/bin/env python3 """Minimal Inferway chat sample. Requires: pip install openai""" import os from openai import OpenAI client = OpenAI( base_url="https://api.inferway.ai/v1", api_key=os.environ["INFERWAY_API_KEY"], ) messages = [{"role": "system", "content": "You are a helpful assistant."}] while True: user = input("You: ") if not user: break messages.append({"role": "user", "content": user}) stream = client.chat.completions.create( model="deepseek/deepseek-v4.1-flash-1017", messages=messages, stream=True, ) reply = "" print("Assistant: ", end="", flush=True) for chunk in stream: if not chunk.choices: continue piece = chunk.choices[0].delta.content if piece: reply += piece print(piece, end="", flush=True) print("\n") messages.append({"role": "assistant", "content": reply})