Connect in two minutes.

Create a key in the console, set the base URL, pick a model id from the Models page. Three settings, any client.

Base URL
https://api.unrestrictable.ai/v1
Key
sk-unr-live-…
Created in the console, shown once
Model
glm-5.3-uncensored
Any id from the Models page

OpenAI SDK, Python

main.py
1from openai import OpenAI
2
3client = OpenAI(base_url="https://api.unrestrictable.ai/v1", api_key="sk-unr-live-…")
4reply = client.chat.completions.create(
5 model="glm-5.3-uncensored",
6 messages=[{"role": "user", "content": "Hello"}],
7 stream=True,
8)
9for chunk in reply:
10 print(chunk.choices[0].delta.content or "", end="")

OpenAI SDK, Node

main.mjs
1import OpenAI from "openai";
2
3const client = new OpenAI({ baseURL: "https://api.unrestrictable.ai/v1", apiKey: "sk-unr-live-…" });
4const stream = await client.chat.completions.create({
5 model: "glm-5.3-uncensored",
6 messages: [{ role: "user", content: "Hello" }],
7 stream: true,
8});
9for await (const chunk of stream) process.stdout.write(chunk.choices[0]?.delta?.content ?? "");

SillyTavern

API: Chat Completion. Source: Custom (OpenAI-compatible). Custom endpoint: https://api.unrestrictable.ai/v1. API key: your key. Then Connect and pick the model from the list it loads. Sampler settings and context sizes per build are in the SillyTavern setup guide.

Janitor AI and other proxies

API: Proxy. URL: https://api.unrestrictable.ai/v1/chat/completions. Key: your key. Model: the id from the Models page. Any client that takes a custom OpenAI URL works the same way. The Janitor AI proxy guide walks through each field and the errors people hit; HammerAI, RisuAI, KoboldAI Lite, Agnai, Novelcrafter and Xoul have their own pages under guides.

OpenCode and Cline

Add an OpenAI-compatible provider with base URL https://api.unrestrictable.ai/v1 and your key, then name the model id. Coding builds such as the uncensored GLM flash code model are on the Models page.

Headers on every answer

x-uplink-request-id identifies the request for support, x-uplink-charge carries the settled charge, and streaming answers end with the usage block. A request that fails before the model answers is not charged.