STEYG Code · Docs3 mục tài liệu

STEYG Code Docs

Hướng dẫn cấu hình, snippet, endpoint và quy ước tích hợp công khai cho người dùng và coding agents.

Tìm hiểu STEYG Code

Hướng dẫn cấu hình

3 bước thiết lập

Trỏ công cụ coding vào endpoint STEYG bằng key của bạn. Endpoint tương thích OpenAI (streaming + /models).

Kiểm tra model
1. Tạo API keyCần làm

Tạo scoped key đầu tiên ở mục API Keys.

2. Cấu hình công cụCần làm

Trỏ Cursor/Cline/Claude Code vào endpoint bên dưới.

3. Gửi request đầu tiênCần làm

Chạy thử và xem nó xuất hiện trong nhật ký request.

Cursor / OpenAI-compatibleOverride OpenAI Base URL
Provider:  OpenAI Compatible
Base URL:  https://steyg.one/api/v1
API Key:   sk-steyg-...
Model:     steyg/claude-haiku-4-5

# Dùng tiền tố steyg/ để Cursor không nhầm với model built-in cùng tên.
# Request Chat Completions phải gửi max_tokens hoặc max_completion_tokens (ví dụ 256).
# Các model khác: steyg/claude-fable-5, steyg/claude-sonnet-5, steyg/claude-opus-5, steyg/gpt-5.6-terra
Cline (VS Code)OpenAI Compatible provider
API Provider: OpenAI Compatible
Base URL:     https://steyg.one/api/v1
API Key:      sk-steyg-...
Model ID:     claude-haiku-4-5
Output cap:   256 tokens (send as max_tokens or max_completion_tokens)
Claude Code (Anthropic native)Shell env
export ANTHROPIC_BASE_URL="https://steyg.one/api"
export ANTHROPIC_AUTH_TOKEN="sk-steyg-..."
export ANTHROPIC_MODEL="claude-haiku-4-5"
export ANTHROPIC_SMALL_FAST_MODEL="claude-haiku-4-5"

# Anthropic Messages yêu cầu max_tokens là số nguyên dương; ví dụ gửi 256 trong request.
# Bắt buộc set cả 2 model: gateway chỉ nhận model ID STEYG Code, không tự suy từ
# tên model mặc định của Claude Code. Bỏ qua sẽ bị lỗi model không hợp lệ.
Codex CLI / desktop~/.codex/config.toml
model = "gpt-5.6-sol"
model_provider = "steyg"

[model_providers.steyg]
name = "STEYG One"
base_url = "https://steyg.one/api/v1"
experimental_bearer_token = "sk-steyg-..."
wire_api = "responses"

# Không dùng field api_key: Codex bỏ qua field đó và request sẽ bị 401.
# Codex desktop: Cmd+Q rồi mở lại để nạp config mới.
OpenAI SDK (TypeScript)chat.completions
import OpenAI from "openai";

const client = new OpenAI({
  apiKey: process.env.STEYG_CODE_API_KEY,
  baseURL: "https://steyg.one/api/v1",
});

const response = await client.chat.completions.create(
  {
    model: "claude-haiku-4-5",
    messages: [{ role: "user", content: "Say hi from STEYG Code." }],
    max_tokens: 256,
  },
  {
    headers: {
      "Idempotency-Key": "deploy-check-001",
    },
  },
);

console.log(response.choices[0]?.message?.content);
OpenAI SDK (Python)chat.completions
import os

from openai import OpenAI

client = OpenAI(
    api_key=os.environ["STEYG_CODE_API_KEY"],
    base_url="https://steyg.one/api/v1",
)

response = client.chat.completions.create(
    model="claude-haiku-4-5",
    messages=[{"role": "user", "content": "Say hi from STEYG Code."}],
    max_tokens=256,
    extra_headers={
        "Idempotency-Key": "deploy-check-001",
    },
)

print(response.choices[0].message.content)
curlSmoke test
curl https://steyg.one/api/v1/chat/completions \
  -H "Authorization: Bearer sk-steyg-..." \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: deploy-check-001" \
  -d '{"model":"claude-haiku-4-5","max_tokens":256,"messages":[{"role":"user","content":"hi"}]}'
Danh sách modelModel discovery
curl https://steyg.one/api/v1/models \
  -H "Authorization: Bearer sk-steyg-..."
Kiểm tra quota / số dưSelf-service usage
curl https://steyg.one/api/v1/usage \
  -H "Authorization: Bearer sk-steyg-..."
API referencehttps://steyg.one/api/v1

Endpoint catalog

Các endpoint khách hàng cần để chạy coding agent, tạo embeddings, xử lý batch, discover model và tự kiểm tra quota.

Authorization: BearerIdempotency-Key
POST/api/v1/chat/completions

Chat completions

OpenAI-compatible chat completions for coding agents and custom clients.

Supports native streaming, idempotent retries, required output caps, and metered usage.

streamidempotentmetered
curl https://steyg.one/api/v1/chat/completions \
  -H "Authorization: Bearer sk-steyg-..." \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: deploy-check-001" \
  -d '{"model":"claude-haiku-4-5","max_tokens":256,"messages":[{"role":"user","content":"Review this diff."}]}'
POST/api/v1/embeddings

Embeddings

Generate vectors for search, retrieval, ranking, and internal knowledge tools.

Embeddings keep the native input shape unchanged and return OpenAI-compatible usage.

vectorsidempotentmetered
curl https://steyg.one/api/v1/embeddings \
  -H "Authorization: Bearer sk-steyg-..." \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: embed-doc-001" \
  -d '{"model":"text-embedding-3-small","input":"menu item text"}'
POST/api/v1/batches

Batch jobs

Queue many OpenAI-compatible requests for asynchronous execution.

Create with POST, then poll the same endpoint with the returned batch identifier.

asyncchatbulk
curl https://steyg.one/api/v1/batches \
  -H "Authorization: Bearer sk-steyg-..." \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: batch-run-001" \
  -d '{"endpoint":"/api/v1/chat/completions","requests":[{"custom_id":"job-1","body":{"model":"claude-haiku-4-5","max_tokens":256,"messages":[{"role":"user","content":"Summarize this file."}]}}]}'

GET /api/v1/batches?id=batch_id
GET/api/v1/models

Models

Discover the models available on STEYG Code.

Every active key sees the same full public catalog — there is no per-key model allow-list.

catalog
curl https://steyg.one/api/v1/models \
  -H "Authorization: Bearer sk-steyg-..."
GET/api/v1/usage

Usage

Check quota, balance, request count, tokens, and spend for the active key.

Optional date and model filters keep self-service billing checks scoped and quick.

quotabillingself-service
curl "https://steyg.one/api/v1/usage?start=2026-07-01&end=2026-07-07" \
  -H "Authorization: Bearer sk-steyg-..."
Kiểm chứng model & receipt

Kiểm chứng strict-routing bằng receipt chữ ký

Mỗi request Chat Completions thành công có thể trả về header X-Steyg-Receipt: bản ghi Ed25519 do STEYG ký về model ID bạn chọn và cam kết không fallback. Khoá công khai bên dưới cho phép kiểm tra receipt do STEYG phát hành và chưa bị sửa đổi.

Lấy khoá công khai

curl -s https://steyg.one/api/v1/receipts/public-key

Gọi một completion và đọc header receipt

curl -s -D - -o /dev/null \
  https://steyg.one/api/v1/chat/completions \
  -H "Authorization: Bearer sk-steyg-..." \
  -H "Content-Type: application/json" \
  -d '{"model":"claude-sonnet-5","messages":[{"role":"user","content":"ping"}],"max_tokens":1}'

Kiểm tra chữ ký và model bằng Node.js

node -e '
(async () => {
  const receipt = JSON.parse(process.argv[1]);
  const publicKeyDer = Buffer.from(process.argv[2], "base64");
  const expectedModel = process.argv[3];
  const { signature, signedAt, kid, ...payload } = receipt;
  const fields = { ...payload, signedAt, kid };
  const body = JSON.stringify(
    Object.fromEntries(Object.entries(fields).sort(([a], [b]) => a.localeCompare(b))),
  );
  const publicKey = await globalThis.crypto.subtle.importKey(
    "spki",
    publicKeyDer,
    { name: "Ed25519" },
    false,
    ["verify"],
  );
  const signatureValid = await globalThis.crypto.subtle.verify(
    { name: "Ed25519" },
    publicKey,
    Buffer.from(signature, "base64"),
    Buffer.from(body),
  );
  const routeValid = receipt.model === expectedModel && receipt.fallbackUsed === false;
  console.log({ signatureValid, routeValid, model: receipt.model, fallbackUsed: receipt.fallbackUsed });
  process.exitCode = signatureValid && routeValid ? 0 : 1;
})().catch((error) => {
  console.error(error);
  process.exitCode = 1;
});
' "<PASTE_X_STEYG_RECEIPT>" "<PASTE_PUBLIC_KEY_BASE64>" "claude-sonnet-5"

Thay hai placeholder bằng toàn bộ giá trị X-Steyg-Receipt và trường publicKeyBase64 từ bước đầu. Đổi argument cuối nếu request dùng model khác. Lệnh trả exit code 0 chỉ khi chữ ký hợp lệ, model khớp và fallbackUsed false.

Receipt xác nhận nội dung do STEYG ký và chưa bị sửa đổi. Đây là cam kết có chữ ký của STEYG, không phải chứng thực độc lập về model vật lý phía nhà cung cấp upstream.