Documentation
Everything you need to call the SunWu.Si API — a working request takes under a minute.
Quickstart
Get a key and make your first request.
API reference
Endpoints, parameters and errors.
Models
Available abliterated models.
Streaming
Render tokens as they arrive.
Tool calling
Let models call your functions.
Support
Request access or get help.
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_urlin 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.
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": "GLM-5.3-SunWu",
"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
| Endpoint | Method | Description |
|---|---|---|
/v1/chat/completions | POST | Chat completions — streaming and tool calling supported |
/v1/completions | POST | Legacy text completions |
/v1/embeddings | POST | Text embeddings |
/v1/models | GET | List the models available to your key |
Chat completions
The core endpoint, following the OpenAI request shape.
| Parameter | Type | Required | Description |
|---|---|---|---|
model | string | yes | Model ID, e.g. GLM-5.3-SunWu |
messages | array | yes | Conversation as {role, content} objects |
stream | boolean | no | Stream tokens via server-sent events |
temperature | number | no | Sampling temperature |
max_tokens | integer | no | Cap on generated tokens |
tools | array | no | OpenAI-style function tools |
Response (abridged):
{
"id": "chatcmpl-...",
"object": "chat.completion",
"model": "GLM-5.3-SunWu",
"choices": [{
"index": 0,
"message": { "role": "assistant", "content": "..." },
"finish_reason": "stop"
}],
"usage": { "prompt_tokens": 9, "completion_tokens": 12, "total_tokens": 21 }
}
Errors
| Status | Meaning | What to do |
|---|---|---|
400 | Malformed request body | Check the JSON and required parameters |
401 | Missing or invalid API key | Check the Authorization header |
429 | Rate limited or quota exhausted | Back off and retry; contact Support for higher limits |
503 | No upstream available for this model | Retry 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="GLM-5.3-SunWu",
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="GLM-5.3-SunWu",
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)
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="GLM-5.3-SunWu",
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: "GLM-5.3-SunWu",
messages: [{ role: "user", content: "Hello" }],
});
console.log(resp.choices[0].message.content);
curl
List the models available to your key:
curl https://api.sunwu.si/v1/models \
-H "Authorization: Bearer $SUNWU_KEY"
Models
| Model | Status | Notes |
|---|---|---|
GLM-5.3-SunWu | Available | Ablated GLM flagship — censorship removed, capabilities preserved |
GET /v1/models for the live list enabled for your key.
GLM-5.3-SunWu 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