UNIT23

API

UNIT23 exposes an OpenAI-compatible Chat Completions API. Point any OpenAI SDK at our base URL, swap in your key, and you’re done.

Basics

Base URLhttps://api.unit23api.com/v1
ProtocolHTTPS, TLS 1.2+
AuthHTTP header Authorization: Bearer <API Key>
Formatapplication/json for both request and response
CompatibilityOpenAI Chat Completions API

Authentication

Every request must include your API key in the Authorization header:

Authorization: Bearer unit23-sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Chat completions

POST /v1/chat/completions creates a chat completion. Both streaming and non-streaming responses are supported.

Request parameters

ParameterTypeRequiredDescription
modelstringYesModel ID — see Available models below.
messagesarrayYesChat messages, same format as OpenAI.
max_tokensintegerNoMax tokens to generate. Unlimited by default.
temperaturenumberNoSampling temperature, 0–2. Default 1.
top_pnumberNoNucleus sampling probability, 0–1. Default 1.
stopstring / arrayNoStop sequences, up to 4.
streambooleanNoSSE streaming output. Default false.
stream_optionsobjectNoWe auto-inject {"include_usage": true}.
seedintegerNoFixed random seed for reproducible output.
toolsarrayNoTool / function calling definitions.
tool_choicestring / objectNoTool selection strategy. Default auto.
response_formatobjectNoOutput format. Supports json_object.

cURL

curl https://api.unit23api.com/v1/chat/completions \
  -H "Authorization: Bearer unit23-sk-xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "deepseek-v3",
    "messages": [
      {"role": "system", "content": "You are a helpful assistant."},
      {"role": "user", "content": "Hello!"}
    ],
    "max_tokens": 100,
    "temperature": 0.7
  }'

Python

from openai import OpenAI

client = OpenAI(
    base_url="https://api.unit23api.com/v1",
    api_key="unit23-sk-xxx",
)

response = client.chat.completions.create(
    model="deepseek-v3",
    messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "Hello!"},
    ],
    max_tokens=100,
    temperature=0.7,
)

print(response.choices[0].message.content)

JavaScript / TypeScript

import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://api.unit23api.com/v1",
  apiKey: "unit23-sk-xxx",
});

const response = await client.chat.completions.create({
  model: "deepseek-v3",
  messages: [
    { role: "system", content: "You are a helpful assistant." },
    { role: "user", content: "Hello!" },
  ],
  max_tokens: 100,
  temperature: 0.7,
});

console.log(response.choices[0].message.content);

Non-streaming response

{
  "id": "chatcmpl-xxx",
  "object": "chat.completion",
  "created": 1713456789,
  "model": "default",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "Hello! How can I help you today?"
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 21,
    "completion_tokens": 9,
    "total_tokens": 30
  }
}

Some models return default in the model field. This does not affect actual usage.

Streaming

Set stream: true to receive Server-Sent Events.

curl https://api.unit23api.com/v1/chat/completions \
  -H "Authorization: Bearer unit23-sk-xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "deepseek-v3",
    "messages": [{"role": "user", "content": "Hello!"}],
    "stream": true
  }'

SSE response

data: {"id":"chatcmpl-xxx","object":"chat.completion.chunk","choices":[{"delta":{"role":"assistant"},"index":0}]}

data: {"id":"chatcmpl-xxx","object":"chat.completion.chunk","choices":[{"delta":{"content":"Hello"},"index":0}]}

data: {"id":"chatcmpl-xxx","object":"chat.completion.chunk","choices":[{"delta":{"content":"!"},"index":0}]}

data: {"id":"chatcmpl-xxx","object":"chat.completion.chunk","choices":[],"usage":{"prompt_tokens":10,"completion_tokens":5,"total_tokens":15}}

data: [DONE]

Available models

Model IDTypeNotes
deepseek-v3.2Reasoning
deepseek-v3Non-reasoningAlias deepseek-v3.1; equivalent.
deepseek-r1ReasoningAlias deepseek-r1-0528; includes <think> tag.
deepseek-r1-distill-qwen-70bDistilled reasoning
minimax-m2.5ReasoningSupports reasoning_content.

Unsupported names

The following return 404 Not Found:

Parameter support

ParameterStatusNotes
max_tokensActiveLimits generation length.
temperatureActive
top_pActive
stopActive
seedActiveReproducible output for the same input.
streamActiveinclude_usage auto-injected.
tools / tool_choiceActiveFunction calling supported.
response_formatActivejson_object supported; some models support json_schema.
logprobs / top_logprobsModel-dependentSupported by some models.

Errors

StatusTypeDescription
200SuccessNormal response.
400Request errorMissing parameter or unconfigured model.
401Auth errorAPI key missing or invalid.
429Rate limitToo many requests.
502Gateway errorUpstream connection failed.
503UnavailableService temporarily unavailable.
504TimeoutResponse timeout (30 seconds).

Error response

{
  "error": {
    "message": "Invalid API key",
    "type": "invalid_request_error"
  }
}

Limits & notes

  1. Request timeout: 30 seconds — returns 504 on timeout.
  2. Model name case: MiniMax-M2.5 is case-insensitive; minimax-m2.5 works too.
  3. Streaming usage: the last SSE chunk contains usage; non-streaming responses include it at the root level.
  4. CORS: enabled — callable directly from browsers.
  5. Content safety: please comply with applicable laws. Generating illegal or harmful content is prohibited.

Support

Questions or trouble? Email hello@unit23.xyz.