ДокументацияNode.js

Node.js

Справочник API

Официальные SDK openai и @anthropic-ai/sdk работают с Zukko без изменений кода — меняются только base URL и ключ. Примеры ниже — ES-модули (Node.js 18+, файл .mjs или "type": "module" в package.json).

SDKBase URLKey
OpenAI (openai)https://api.zukko.pro/v1fetch_...
Anthropic (@anthropic-ai/sdk)https://api.zukko.profetch_...

Ключ удобно держать в переменной окружения:

bash
export ZUKKO_API_KEY="fetch_..."

1OpenAI SDK

bash
npm install openai
js
import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://api.zukko.pro/v1",
  apiKey: process.env.ZUKKO_API_KEY,
});

const r = await client.chat.completions.create({
  model: "gpt-5.6-sol",
  messages: [{ role: "user", content: "Привет!" }],
});
console.log(r.choices[0].message.content);

Потоковый ответ

js
const stream = await client.chat.completions.create({
  model: "claude-sonnet-5",
  messages: [{ role: "user", content: "Напиши хайку про код" }],
  stream: true,
});

for await (const chunk of stream) {
  if (chunk.choices.length > 0) {
    process.stdout.write(chunk.choices[0].delta?.content ?? "");
  } else if (chunk.usage) {
    console.log("\nтокены:", chunk.usage.prompt_tokens, "вход,", chunk.usage.completion_tokens, "выход");
  }
}

Проверка chunk.choices.length обязательна: Zukko включает stream_options.include_usage, и последний фрагмент потока приходит с usage и пустым choices.

Стоимость запроса

js
const { data, response } = await client.chat.completions
  .create({ model: "glm-5.3-flash", messages: [{ role: "user", content: "Привет!" }] })
  .withResponse();

console.log(response.headers.get("x-zukko-cost-micros")); // микродоллары
console.log(data.choices[0].message.content);

Заголовок есть только у обычных (не потоковых) ответов.

2Anthropic SDK

bash
npm install @anthropic-ai/sdk
js
import Anthropic from "@anthropic-ai/sdk";

const client = new Anthropic({
  baseURL: "https://api.zukko.pro",
  apiKey: process.env.ZUKKO_API_KEY,
});

const msg = await client.messages.create({
  model: "claude-sonnet-5",
  max_tokens: 1024,
  messages: [{ role: "user", content: "Привет!" }],
});
console.log(msg.content[0].text);

Base URL — без /v1: SDK сам добавит /v1/messages.

Потоковый ответ

js
const stream = client.messages.stream({
  model: "claude-sonnet-5",
  max_tokens: 1024,
  messages: [{ role: "user", content: "Напиши хайку про код" }],
});

stream.on("text", (text) => process.stdout.write(text));
const final = await stream.finalMessage();
console.log("\nтокены на выходе:", final.usage.output_tokens);

3Если что-то не так

Коды ошибок и что с ними делать — в разделе Ошибки API. Формат потоков — в разделе Стриминг.

Node.js · Документация Zukko