Documentation

Everything you need to call the SunWu.Si API — a working request takes under a minute.

Overview

SunWu.Si serves abliterated open-weight models behind an OpenAI-compatible API. Abliteration surgically removes refusal behavior from a model's weights — reasoning, coding and math capabilities stay intact — so the model follows your instructions, governed by your own policy.

  • OpenAI-compatible — swap the base_url in any OpenAI SDK and existing code keeps working.
  • Unrestricted by default — no refusals, no moralizing preambles.
  • Governed by your policy — you decide how the models are used.
  • Full-featured — streaming, tool calling and embeddings are supported.
Base URL for all requests: https://api.sunwu.si/v1

Quickstart

1. Get an API key

Access is provisioned by our team. Reach out via Support to get your key — keys are bearer tokens that look like sk-....

2. Make a request

curl https://api.sunwu.si/v1/chat/completions \
  -H "Authorization: Bearer $SUNWU_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "SunWu-5-Pro",
    "messages": [{"role": "user", "content": "Hello"}]
  }'

3. Stream tokens

Add "stream": true to receive server-sent events as tokens are generated — see Streaming for a complete example.

Authentication

Every request must carry your API key as a bearer token:

Authorization: Bearer sk-your-key-here
  • Keep keys server-side — never embed them in client-side code.
  • A request with a missing or invalid key returns 401.
  • Keys are scoped to your account's quota and model access.
  • To rotate or revoke a key, contact Support.

Endpoints

EndpointMethodDescription
/v1/chat/completionsPOSTChat completions — streaming and tool calling supported
/v1/completionsPOSTLegacy text completions
/v1/embeddingsPOSTText embeddings
/v1/modelsGETList the models available to your key

Chat completions

The core endpoint, following the OpenAI request shape.

ParameterTypeRequiredDescription
modelstringyesModel ID, e.g. SunWu-5-Pro
messagesarrayyesConversation as {role, content} objects
streambooleannoStream tokens via server-sent events
temperaturenumbernoSampling temperature
max_tokensintegernoCap on generated tokens
toolsarraynoOpenAI-style function tools

Response (abridged):

{
  "id": "chatcmpl-...",
  "object": "chat.completion",
  "model": "SunWu-5-Pro",
  "choices": [{
    "index": 0,
    "message": { "role": "assistant", "content": "..." },
    "finish_reason": "stop"
  }],
  "usage": { "prompt_tokens": 9, "completion_tokens": 12, "total_tokens": 21 }
}

Errors

StatusMeaningWhat to do
400Malformed request bodyCheck the JSON and required parameters
401Missing or invalid API keyCheck the Authorization header
429Rate limited or quota exhaustedBack off and retry; contact Support for higher limits
503No upstream available for this modelRetry shortly

Streaming

Set stream: true to receive tokens over server-sent events. Raw responses are data: {...} lines terminated by data: [DONE]; the OpenAI SDKs decode them for you:

stream = client.chat.completions.create(
    model="SunWu-5-Pro",
    messages=[{"role": "user", "content": "Stream this"}],
    stream=True,
)

for chunk in stream:
    delta = chunk.choices[0].delta.content
    if delta:
        print(delta, end="", flush=True)

Tool calling

Pass OpenAI-style tools and the model returns structured calls:

resp = client.chat.completions.create(
    model="SunWu-5-Pro",
    messages=[{"role": "user", "content": "What's the weather in Tokyo?"}],
    tools=[{
        "type": "function",
        "function": {
            "name": "get_weather",
            "description": "Get current weather for a city",
            "parameters": {
                "type": "object",
                "properties": {"city": {"type": "string"}},
                "required": ["city"],
            },
        },
    }],
)

print(resp.choices[0].message.tool_calls)
Tool calling passes through to the underlying model; availability depends on the model.

Python

Use the official openai package with a custom base URL:

import os
from openai import OpenAI

client = OpenAI(
    base_url="https://api.sunwu.si/v1",
    api_key=os.environ["SUNWU_KEY"],
)

resp = client.chat.completions.create(
    model="SunWu-5-Pro",
    messages=[{"role": "user", "content": "Hello"}],
)
print(resp.choices[0].message.content)

Node / TypeScript

Same idea with the official openai npm package:

import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://api.sunwu.si/v1",
  apiKey: process.env.SUNWU_KEY,
});

const resp = await client.chat.completions.create({
  model: "SunWu-5-Pro",
  messages: [{ role: "user", content: "Hello" }],
});
console.log(resp.choices[0].message.content);
Any framework with OpenAI-compatible base-URL support works the same way (LangChain, Vercel AI SDK, LlamaIndex, …).

curl

List the models available to your key:

curl https://api.sunwu.si/v1/models \
  -H "Authorization: Bearer $SUNWU_KEY"

Models

ModelStatusNotes
SunWu-5-ProAvailableBuilt on GLM-5.3, with censorship mechanisms removed while retaining the model's original capabilities.
Availability depends on your account — call GET /v1/models for the live list enabled for your key. SunWu-5-Pro is a reasoning model: it emits internal reasoning tokens before the answer, so budget a generous max_tokens (reasoning counts toward usage).

Support

Need a key, higher limits, or help with an integration? Reach us on Telegram: t.me/sslge