Skip to content

API脚本 接入教程

下面示例覆盖三类文本接口。复制后把 YOUR_API_KEY 替换为你的密钥即可运行。

提示

API Key 请在 密钥管理 获取。GPT 系列模型走 OpenAI 接口,Claude 系列模型走 Anthropic 接口(也兼容 OpenAI 接口)。

OpenAI Responses

新一代 OpenAI 接口,适合文本对话和流式输出。POST /v1/responses

python
import json
import urllib.request

API_URL = "https://api.omniapexroute.com/v1/responses"
API_KEY = "YOUR_API_KEY"

body = {
    "model": "gpt-5.6-sol",
    "stream": True,
    "input": "用中文简单介绍一下 OmniApexRoute。",
}

def iter_sse(response):
    buffer = ""
    while chunk := response.read(4096):
        buffer += chunk.decode("utf-8", errors="replace")
        frames = buffer.split("\n\n")
        buffer = frames.pop()
        for frame in frames:
            data = "\n".join(line[5:].strip() for line in frame.splitlines() if line.startswith("data:")).strip()
            if data and data != "[DONE]":
                yield data

request = urllib.request.Request(
    API_URL,
    data=json.dumps(body).encode("utf-8"),
    method="POST",
    headers={"Authorization": "Bearer " + API_KEY, "Content-Type": "application/json", "Accept": "text/event-stream"},
)

with urllib.request.urlopen(request, timeout=900) as response:
    for data in iter_sse(response):
        event = json.loads(data)
        if event.get("type") == "response.output_text.delta":
            print(event.get("delta", ""), end="", flush=True)
        if event.get("type") in ("response.completed", "response.done"):
            break
    print()
js
const API_URL = "https://api.omniapexroute.com/v1/responses";
const API_KEY = "YOUR_API_KEY";

const response = await fetch(API_URL, {
  method: "POST",
  headers: {
    Authorization: `Bearer ${API_KEY}`,
    "Content-Type": "application/json",
    Accept: "text/event-stream",
  },
  body: JSON.stringify({
    model: "gpt-5.6-sol",
    stream: true,
    input: "用中文简单介绍一下 OmniApexRoute。",
  }),
});

const decoder = new TextDecoder();
let buffer = "";
for await (const chunk of response.body) {
  buffer += decoder.decode(chunk, { stream: true });
  const frames = buffer.split("\n\n");
  buffer = frames.pop();
  for (const frame of frames) {
    const data = frame
      .split("\n")
      .filter((line) => line.startsWith("data:"))
      .map((line) => line.slice(5).trim())
      .join("\n");
    if (!data || data === "[DONE]") continue;
    const event = JSON.parse(data);
    if (event.type === "response.output_text.delta") {
      process.stdout.write(event.delta ?? "");
    }
  }
}
console.log();

OpenAI Chat Completions

兼容传统 OpenAI Chat 格式,适合已有客户端平滑迁移。POST /v1/chat/completions

python
import json
import urllib.request

API_URL = "https://api.omniapexroute.com/v1/chat/completions"
API_KEY = "YOUR_API_KEY"

body = {
    "model": "gpt-5.6-sol",
    "stream": True,
    "messages": [{"role": "user", "content": "用中文简单介绍一下 OmniApexRoute。"}],
}

def iter_sse(response):
    buffer = ""
    while chunk := response.read(4096):
        buffer += chunk.decode("utf-8", errors="replace")
        frames = buffer.split("\n\n")
        buffer = frames.pop()
        for frame in frames:
            data = "\n".join(line[5:].strip() for line in frame.splitlines() if line.startswith("data:")).strip()
            if data and data != "[DONE]":
                yield data

request = urllib.request.Request(
    API_URL,
    data=json.dumps(body).encode("utf-8"),
    method="POST",
    headers={"Authorization": "Bearer " + API_KEY, "Content-Type": "application/json", "Accept": "text/event-stream"},
)

with urllib.request.urlopen(request, timeout=900) as response:
    for data in iter_sse(response):
        chunk = json.loads(data)
        for choice in chunk.get("choices") or []:
            print((choice.get("delta") or {}).get("content", ""), end="", flush=True)
    print()
js
const API_URL = "https://api.omniapexroute.com/v1/chat/completions";
const API_KEY = "YOUR_API_KEY";

const response = await fetch(API_URL, {
  method: "POST",
  headers: {
    Authorization: `Bearer ${API_KEY}`,
    "Content-Type": "application/json",
    Accept: "text/event-stream",
  },
  body: JSON.stringify({
    model: "gpt-5.6-sol",
    stream: true,
    messages: [{ role: "user", content: "用中文简单介绍一下 OmniApexRoute。" }],
  }),
});

const decoder = new TextDecoder();
let buffer = "";
for await (const chunk of response.body) {
  buffer += decoder.decode(chunk, { stream: true });
  const frames = buffer.split("\n\n");
  buffer = frames.pop();
  for (const frame of frames) {
    const data = frame
      .split("\n")
      .filter((line) => line.startsWith("data:"))
      .map((line) => line.slice(5).trim())
      .join("\n");
    if (!data || data === "[DONE]") continue;
    const event = JSON.parse(data);
    for (const choice of event.choices ?? []) {
      process.stdout.write(choice.delta?.content ?? "");
    }
  }
}
console.log();

Anthropic Messages

Claude / Anthropic Messages 格式,适合 Claude 系列模型。POST /v1/messages

python
import json
import urllib.request

API_URL = "https://api.omniapexroute.com/v1/messages"
API_KEY = "YOUR_API_KEY"

body = {
    "model": "claude-sonnet-5",
    "max_tokens": 64000,
    "stream": True,
    "messages": [{"role": "user", "content": "用中文简单介绍一下 OmniApexRoute。"}],
}

def iter_sse(response):
    buffer = ""
    while chunk := response.read(4096):
        buffer += chunk.decode("utf-8", errors="replace")
        frames = buffer.split("\n\n")
        buffer = frames.pop()
        for frame in frames:
            data = "\n".join(line[5:].strip() for line in frame.splitlines() if line.startswith("data:")).strip()
            if data and data != "[DONE]":
                yield data

request = urllib.request.Request(
    API_URL,
    data=json.dumps(body).encode("utf-8"),
    method="POST",
    headers={"Authorization": "Bearer " + API_KEY, "Content-Type": "application/json", "Accept": "text/event-stream"},
)

with urllib.request.urlopen(request, timeout=900) as response:
    for data in iter_sse(response):
        event = json.loads(data)
        if event.get("type") == "content_block_delta":
            print((event.get("delta") or {}).get("text", ""), end="", flush=True)
        if event.get("type") == "message_stop":
            break
    print()
js
const API_URL = "https://api.omniapexroute.com/v1/messages";
const API_KEY = "YOUR_API_KEY";

const response = await fetch(API_URL, {
  method: "POST",
  headers: {
    Authorization: `Bearer ${API_KEY}`,
    "Content-Type": "application/json",
    Accept: "text/event-stream",
  },
  body: JSON.stringify({
    model: "claude-sonnet-5",
    max_tokens: 64000,
    stream: true,
    messages: [{ role: "user", content: "用中文简单介绍一下 OmniApexRoute。" }],
  }),
});

const decoder = new TextDecoder();
let buffer = "";
for await (const chunk of response.body) {
  buffer += decoder.decode(chunk, { stream: true });
  const frames = buffer.split("\n\n");
  buffer = frames.pop();
  for (const frame of frames) {
    const data = frame
      .split("\n")
      .filter((line) => line.startsWith("data:"))
      .map((line) => line.slice(5).trim())
      .join("\n");
    if (!data || data === "[DONE]") continue;
    const event = JSON.parse(data);
    if (event.type === "content_block_delta") {
      process.stdout.write(event.delta?.text ?? "");
    }
  }
}
console.log();