Docs · quickstart

First response in under a minute.

The API is OpenAI-compatible. Base URL https://api.llmtech.eu/v1, model unsloth/Qwen3.8-27B-NVFP4. Below is a shared free trial key — try before you talk to anyone.

trial key
lt-trial-ba1ef28c6d32ed6980678d8d

Shared and rate-limited: 2 concurrent requests, for evaluation only. It rotates when abused. For production, email artem@llmtech.eu — a personal key with 64 concurrent is issued the same day, usually within the hour.

first request
curl
curl https://api.llmtech.eu/v1/chat/completions \
  -H "Authorization: Bearer lt-trial-ba1ef28c6d32ed6980678d8d" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "unsloth/Qwen3.8-27B-NVFP4",
    "messages": [{"role": "user", "content": "Say hello"}],
    "stream": true
  }'
python (openai sdk)
from openai import OpenAI

client = OpenAI(
    base_url="https://api.llmtech.eu/v1",
    api_key="lt-trial-ba1ef28c6d32ed6980678d8d",
)

r = client.chat.completions.create(
    model="unsloth/Qwen3.8-27B-NVFP4",
    messages=[{"role": "user", "content": "Say hello"}],
    stream=True,
)
for chunk in r:
    print(chunk.choices[0].delta.content or "", end="")
javascript (openai sdk)
import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://api.llmtech.eu/v1",
  apiKey: "lt-trial-ba1ef28c6d32ed6980678d8d",
});

const stream = await client.chat.completions.create({
  model: "unsloth/Qwen3.8-27B-NVFP4",
  messages: [{ role: "user", content: "Say hello" }],
  stream: true,
});
for await (const chunk of stream) {
  process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
}
reasoning control

The model reasons adaptively: it thinks on hard prompts and skips thinking on trivial ones. You can override per request:

{
  "model": "unsloth/Qwen3.8-27B-NVFP4",
  "messages": [{"role": "user", "content": "2+2?"}],
  "chat_template_kwargs": {
    "enable_thinking": false
  }
}
enable_thinkingtrue / false
reasoning_effort"low" / "medium" / "xhigh"

Reasoning text comes back in reasoning (non-streaming) or reasoning_content deltas (streaming). Reasoning tokens are billed as output.

prompt caching

Automatic, no code changes. Repeated prompt prefixes are billed at $0.04/M instead of $0.25/M. Cache materializes from the second identical-prefix request onward and works on prefixes from roughly 5K tokens. Check usage.prompt_tokens_details.cached_tokens in the response to see it working.

errors and limits
CodeMeaningWhat to do
401invalid or missing API keycheck the Authorization header
404unknown model iduse unsloth/Qwen3.8-27B-NVFP4
429concurrency limit reachedretry after the Retry-After header (1s); requests never queue silently
400malformed request / context overflowthe error message names the exact problem
5xxserver-side failureretry with backoff; check status

Default limits: 64 concurrent requests per production key (trial: 2), context up to 262,144 tokens. Need more concurrency — ask, the capacity exists.

known quirks

Five things behave differently from a plain OpenAI endpoint. We tested each one against production rather than guessing, and we would rather you read it here than discover it at three in the morning.

min_p and logit_biasrejected — incompatible with our speculative decoding
system message positionmust come first; several in a row are fine
images in a system messagenot allowed — put them in a user message
reasoning_effortlow / medium / xhigh; minimal maps to low, high and max map to xhigh
model in the responseechoes our internal name qwen38, not the id you sent

The last one is worth a sentence. Requests must use the public id unsloth/Qwen3.8-27B-NVFP4 — anything else is a 404 — but the response and the stream chunks currently carry the internal served name. Harmless for every client we have seen, since nothing routes on it, but if your code asserts that the response model equals the requested one, that assertion will fail. Say so and we will change it.

Everything else you would expect works, including max_completion_tokens, seed, logprobs, response_format with a JSON schema, tool calling with the standard string-encoded arguments, the developer role, and the sampler set temperature / top_p / top_k / repetition_penalty.