EVREN¶
EVREN is an AI platform run by Türkiye's Presidency of Defence Industries (SSB) at evren.ssyz.org.tr. Its LLM gateway serves open-weight models from GPUs hosted in Türkiye through an OpenAI-compatible API.
Everything below was observed on 2026-10-11 unless marked otherwise. Re-check before relying on it.
Access¶
- Sign-in is through e-Devlet (national e-government identity); one account per national ID.
- API keys are created on the site's API keys page and look like
evren_llm_.... A key is shown once. - The terms forbid sharing keys. Each person needs their own account and key.
- Going by the site's code (2026-10-17), a key has settings of its own: whether models think when the request does not say (
thinking_enabled), the models it may use (allowed_models,allow_auto), a request rate (rpm_limit), a daily token cap, and an expiry date. A rotated key keeps working for a grace period.
API¶
- Base URL:
https://evren-llmapi.ssyz.org.tr/v1 - Authentication:
X-API-Key: <key>orAuthorization: Bearer <key>. Ülgen sends the Bearer form. A request whose two headers carry different keys is rejected with400and codebad_request("Authorization ve X-API-Key farklı anahtarlar içeriyor"). - An Anthropic-style endpoint (2026-10-17).
POST /v1/messagesandPOST /v1/messages/count_tokensnow answer; on 2026-10-11 they were 404. They are in the published OpenAPI document, not in the site's documentation. With Claude Code 2.1.302 pointed at them,deepseek-v4.1-flash,glm-5.3,gemma-4-31bandmimo-v2.6-proanswered, reading a file with a tool and thinking.qwen3.8-flash-nextrefused Claude Code's default effort ("Unexpected reasoning effort high"), andqwen3-vl-30brefused thethinkingfield. Ülgen keeps its translator, which handles both models.
| Method | Path | Purpose |
|---|---|---|
| POST | /v1/chat/completions |
Chat, including streaming |
| POST | /v1/responses |
OpenAI Responses format |
| POST | /v1/messages, /v1/messages/count_tokens |
Anthropic Messages (2026-10-17, see above) |
| GET | /v1/models |
Models and prices for the account |
| GET | /v1/quota |
Daily and 5-minute window usage; costs no tokens |
| POST | /v1/embeddings |
Embeddings |
| POST | /v1/rerank |
Reranking (Cohere/Jina-style contract) |
| POST | /v1/ocr |
Document OCR |
| POST | /v1/audio/transcriptions |
Speech to text |
| GET | /v1/terms/status |
Whether the current terms are accepted |
| GET | /v1/terms/text |
The terms text |
| POST | /v1/terms/accept |
Accept, with body {"version": N} |
The OpenAPI document (2026-10-17) also lists /v1/completions, /v1/systemone and /v1/systemone/batch (the decision models), an upload flow under /v1/media, GET /v1/requests/{id}, and GET/DELETE /v1/responses/{id}. None of them has been tried.
Terms gate¶
Until the account accepts the current terms, every call returns 403 with code: "terms_not_accepted" and the required version. Acceptance is once per account and is requested again only for a material new version.
The recorded shapes:
GET /v1/terms/status→{"current_version":1,"is_material":true,"doc_path":"docs/legal/LLM_TERMS_OF_SERVICE_v1.md","accepted":false}.GET /v1/terms/text→{"version":1,"doc_path":"...","content":"<Markdown, about 3,500 characters, in Turkish>"}.POST /v1/terms/acceptwith{"version":1}→200 {"accepted_version":1,"accepted_at":"2026-10-11T18:08:07+00:00"}. A wrong version →400with codeterms_version_mismatch.
Models¶
| Model | Task | Context | Max output | Capabilities | reasoning_effort (2026-10-17) |
|---|---|---|---|---|---|
deepseek-v4.1-flash |
chat | 1,048,576 | 65,536 | tools, thinking, image input, structured output | yes |
deepseek-v4-flash |
chat | 1,048,576 | 16,384 | tools, thinking, structured output | yes |
mimo-v2.6-pro |
chat | 1,048,576 | 16,384 | tools, thinking, image input, structured output | listed: none, minimal, low, medium, high, xhigh |
glm-5.3 |
chat | 524,288 | 16,384 | tools, thinking, structured output | yes |
qwen3.8-flash-next |
chat | 262,144 | 16,384 | tools, thinking, image input, structured output | yes |
gemma-4-31b |
chat | 262,144 | 16,384 | tools, image input, structured output; thinking listed since 2026-10-17 | no |
qwen3-vl-30b |
vision_chat | 262,144 | 16,384 | tools, image input, structured output | no |
auto |
routing mode | 32,768 | 16,384 | the gateway picks a model; the response names it | no |
Also served: dots-ocr, deepseek-ocr-2, qwen3-embedding-8b, qwen3-reranker-8b, qwen3-asr-1.7b, qwen3-guard-4b, and the decision models laya and clef.
The task field holds chat or vision_chat for chat models.
Models may be addressed by short id (glm-5.3) or repository name (zai/glm-5.3-fp8).
Reasoning effort¶
Measured on 2026-10-17 with chat completions. /v1/models lists the capability as capabilities.reasoning_effort, with reasoning_effort_values and reasoning_effort_aliases where a model has them.
| Model | Refuses |
|---|---|
deepseek-v4.1-flash, deepseek-v4-flash, glm-5.3 |
nothing of none, minimal, low, medium, high, xhigh, max |
mimo-v2.6-pro |
max |
qwen3.8-flash-next |
minimal, max ("Supported types are xhigh (default), medium, and low"; high is taken as xhigh) |
gemma-4-31b, qwen3-vl-30b |
the field itself: 400, "model '…' 'reasoning_effort' parametresini desteklemiyor" |
none turns reasoning off. Any other value is refused by the gateway's own check. A max_tokens above a model's output limit is accepted (32,000 for glm-5.3).
Limits and price¶
- Free until 2026-11-01: every model is listed at 0 CR. After that, usage is billed in platform credits (CR); the per-token price had not been published.
- Daily quota: 15,000,000 tokens per account, across all models and all keys, resetting at 03:00 Istanbul time. The site states this quota is valid until 2026-11-01.
- Prompt tokens served from the prefix cache count at 3% toward the quota. Keeping the start of the prompt stable makes the quota go much further.
- The site states 500,000 tokens per minute and 32 concurrent requests. Response headers showed
x-ratelimit-limit-requests: 1200andx-ratelimit-limit-tokens: 2500000. 429means the account quota;503means the server is busy.- 2026-10-17: still no per-token price. The site's public statistics (
https://api.ssyz.org.tr/api/v1/public/llm-stats) givedaily_token_quota_until: 2026-11-01T03:00:00+03:00, and nothing says what follows. Going by the site's own code, not tried: credits come from rewards for contributions (labelling, uploading data, publishing models and datasets; at most 100 CR a day), from requests an administrator reviews, from campaign coupons and from grants to an organisation. The platform's web API answers402withINSUFFICIENT_CREDITS; what the LLM API answers to an account without credits has not been seen.
Behaviour worth handling¶
- Quota headers on every response:
x-evren-daily-limit-tokens,x-evren-daily-remaining-tokens,x-evren-daily-reset(Unix time),x-evren-credits-remaining,x-evren-routed-model. - Extra usage fields:
usage.evrencarriescredits_held_cr,credits_remaining_crandrouted_model. - Reasoning: thinking models return it in
message.reasoning. Thinking and the final answer share themax_tokensbudget; the site recommends at least 2,048 and suggests 4,096. - Keep-alive: during long thinking the server sends a comment line (starting with
:) every 10 seconds on the event stream. A parser must skip these. - Images: base64 data URLs only, at most 4 per request, 4 MiB each and 8 MiB in total. Remote image URLs are rejected with
400.
Data handling¶
The terms state that prompt and completion text is processed under Turkish data-protection law (KVKK) and mention a corpus-consent mechanism and a right to be forgotten; the details are in documents that were not available. The service is provided as is, with no service-level commitment. Do not send confidential material.
Sign-in flow in Ülgen¶
The e-Devlet step cannot be skipped. Everything after it is one command:
ulgen loginopens EVREN's own API keys page in the browser (unless--no-browseris given) and asks for the key; when stdin is a terminal the key is read without echo.- Ülgen validates the key with
GET /v1/terms/status; a rejected key stores nothing. - If the terms are not yet accepted, Ülgen prints them and, only after the user agrees, records acceptance through
POST /v1/terms/accept. - Ülgen stores the key in the operating system's credential store, then prints the models and the remaining daily quota (the same report as
ulgen status).
Sign-in without copy and paste would need support from EVREN. The site's two candidate pages were examined on 2026-10-17, and neither is such support. sso-login is where e-Devlet's sign-in (OpenID Connect, client evren) returns to the site, at a fixed address. env-handoff moves an administrator from the site to its test environment.
Existing community bridges¶
Not reviewed; listed for reference.
github.com/berkaycari/evren-codex-proxy— EVREN for OpenAI Codex CLIgithub.com/bykemalh/evren-llm-opencode— EVREN provider setup for opencodegithub.com/mustafacoshkun/evren— unofficial EVREN command-line clientgithub.com/macbyclp/evren-fleet— a Claude Code skill that uses EVREN workersgithub.com/speker/evren-sdk— an SDK the site's own sample code imports; it expects402orinsufficient_quotafor missing credits and sends anIdempotency-Keygithub.com/Kscl1/evren-bridge— a local proxy that tells the per-minute429from the daily one; it rotates several keys, which the terms forbidgithub.com/heimdilon/kalfa— itsresearch/evren-probenotes that the last chunk of a stream carries nousage.evrengithub.com/s-kali/evren-claude-code,github.com/acarbayk/Evren-Claude-Test-— Claude Code on EVREN through LiteLLM
Not verified¶
- Whether the API works with a key from outside Türkiye. Without a key, probes from nine countries in Europe and Asia got
401on 2026-10-17 (through check-host.net), so nothing blocks a foreign address before the key is checked. - Prices and quotas after 2026-11-01.