Docs · v1

One endpoint. Five models.

The API is OpenAI-compatible. If your client already speaks the OpenAI chat format, change two values — the base URL and the key — and you are done.

BASEhttps://unrestrict.me/v1

Quickstart

Create a key in the dashboard, export it, and make a request. Streaming is on by default in every example below.

cURLbash
curl https://unrestrict.me/v1/chat/completions \
  -H "Authorization: Bearer $UNRESTRICT_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "Unrestrict DeepSeek 1017",
    "messages": [
      {"role": "user", "content": "Explain a CVE chain."}
    ],
    "stream": true
  }'

Authentication

Pass the key as a bearer token. Keys are prefixed with ur_live_ and are shown once when created.

Headerhttp
Authorization: Bearer ur_live_...

Keep keys server-side. A key in a browser bundle is a key in someone else's hands.

Chat completions

The request shape is the same as the OpenAI chat completions API. The only difference that matters is the model list.

Pythonopenai
from openai import OpenAI

client = OpenAI(
    base_url="https://unrestrict.me/v1",
    api_key="ur_live_...",
)

stream = client.chat.completions.create(
    model="Unrestrict DeepSeek 1017",
    messages=[{"role": "user", "content": "Explain a CVE chain."}],
    stream=True,
)

for chunk in stream:
    print(chunk.choices[0].delta.content or "", end="")
TypeScriptopenai
import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://unrestrict.me/v1",
  apiKey: process.env.UNRESTRICT_KEY,
});

const stream = await client.chat.completions.create({
  model: "Unrestrict DeepSeek 1017",
  messages: [{ role: "user", content: "Explain a CVE chain." }],
  stream: true,
});

for await (const chunk of stream) {
  process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
}

Streaming

Set stream: true and read server-sent events. Each event is a JSON delta; the stream ends with data: [DONE].

SSEtext/event-stream
data: {"id":"chatcmpl_01","choices":[{"delta":{"content":"A"}}]}
data: {"id":"chatcmpl_01","choices":[{"delta":{"content":" CVE"}}]}
data: {"id":"chatcmpl_01","choices":[{"delta":{"content":" chain"}}]}
data: [DONE]

If the connection drops, reconnect with the same messages. Tokens already produced are billed; the failed tail is not.

Usage

GET /api/usage on this site returns the same account and key numbers the desktop IDE shows: credits and balance, the key's spend limit, and daily, weekly and monthly request and token totals. It uses the same bearer key as inference.

cURLbash
curl https://unrestrict.me/api/usage \
  -H "Authorization: Bearer $UNRESTRICT_KEY"

Model IDs

There are five models. Use the exact ID in the model field. It is the same ID the API returns from GET /v1/models.

  • Unrestrict DeepSeek 1017 — Unrestrict DeepSeek 1017 — 512K context — $0.2143 in / $0.8571 out per 1M tokens.
  • Unrestrict Gemma 4 26B A4B Heretic — Unrestrict Gemma 4 26B A4B Heretic — 128K context — $0.18 in / $0.57 out per 1M tokens.
  • Unrestrict Qwen 3.8 27B Derestricted — Unrestrict Qwen 3.8 27B Derestricted — 128K context — $0.15 in / $0.90 out per 1M tokens.
  • Unrestrict GLM 5.3 Flash Cybersecurity — Unrestrict GLM 5.3 Flash Cybersecurity — 128K context — $0.22 in / $0.75 out per 1M tokens.
  • Unrestrict Apex Flash 1 Abliterated — Unrestrict Apex Flash 1 Abliterated — 128K context — $0.22 in / $0.75 out per 1M tokens.

Every model is served through /v1/chat/completions. The model ID is the only routing decision; there is no hidden fallback.

Errors

Errors use a stable JSON shape. The HTTP status is the one you should branch on.

402application/json
{
  "error": {
    "type": "insufficient_balance",
    "message": "Balance is $0.00. Top up to continue.",
    "code": 402
  }
}
  • 401 — missing or revoked key.
  • 402 — balance exhausted.
  • 404 — unknown model ID.
  • 429 — concurrency limit; retry with backoff.
  • 500 — the request failed before it produced tokens; it is not billed.

Limits

Concurrency is limited per account, not per day. Context is limited by the model. There is no monthly quota and no seat count.

Need a higher concurrency ceiling? Send a note to [email protected] with your expected RPS.